背景资料:
我有一个PHP脚本,它解析文本文件并使用它将数据插入mongo数据库。我不再使用旧的Mongo PHP驱动程序,而是使用MongoDB\driver类(http://php.net/manual/en/book.mongodb.php)
问题
有一段代码,我试图用新类重写,但我似乎无法让它工作——也就是它没有向数据库写入数据...我也不知道如何找到错误。
旧代码:
这是旧代码:
//database variables
$m = new MongoClient("mongodb://127.0.0.1:27017");
$db = "locations";
function update_location_status($location)
{
global $m, $db;
$collection = $db->locations;
echo "<pre>".json_encode($status)."</pre>";
try {
$cursor = $collection->update(array('domain'=>$status['domain']) , array('$set'=>$status), array('upsert'=>true) );
echo "Successfully upserted location status record for ". $location['domain'] ." into database...<BR>";
return true;
} catch(MongoCursorException $e) {
var_dump($cursor);
return false;
}
新代码
$m = new \MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");
function update_location_status($location)
{
global $m;
echo "<pre>".json_encode($status)."</pre>";
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
[array('domain'=>$status['domain'])],
[array('domain'=>$status)],
['multi' => false, 'upsert' => true]
);
try{
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $m->executeBulkWrite('db.locations', $bulk, $writeConcern);
if($result->getInsertedCount()){
return true;
}else{
echo "<font color=red><pre>";
var_dump($result->getWriteErrors());
echo "</pre></font>";
return false;
}
} catch(MongoCursorException $e) {
var_dump($result);
return false;
}
后果
我尝试使用getWriteErrors
转储错误消息时返回一个空数组:
array(0) {
}
如有任何建议,将不胜感激。
编辑1
所以我更新了代码,它正在创建数据,但它看起来与以前/旧的代码不同。这是来自旧代码的数据的样子:
{ "_id" : ObjectId("584586312a0d63c2e21eee12"),
"bbn" : "133",
"customized" : true,
"nep" : "812",
"pdate" : ISODate("2017-02-05T06:44:41Z"),
"domain" : "test.mydomain", "status" : false, "t_name" : "agcab", "type" : "current_status"
}
使用此代码:
global $m, $db;
echo "<pre>".json_encode($status)."</pre>";
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
['domain'=>$status['domain']],
['$set'=>['domain'=>$status]],
['multi' => false, 'upsert' => true]
);
数据最终看起来像:
{ "_id" : ObjectId("5910da5d99077b6b4887582f"),
"domain" : {
"bbn" : "133",
"nep" : "812",
"type" : "current_status",
"pdate" : ISODate("1970-01-18T07:00:12.882Z"),
"status" : false,
"domain" : "test.mydomain",
"tenant_name" : "agcab",
"customized" : true
}
}
我不希望它嵌套在另一个“域”数组下。
您应该将代码更新到下面。
$bulk->update(
['domain'=>$status['domain']],
['$set'=>$status],
['multi' => false, 'upsert' => true]
);
$result = $m->executeBulkWrite(dbname.collectionname, $bulk, $writeConcern);
出身背景 我有一个远程托管服务器,它运行java vm,带有多人实时问答游戏的自定义服务器代码。服务器处理配对、房间、大厅等。我还在同一个空间使用Mongo db,其中包含手机问答游戏的所有问题。 这是我第一次尝试这样的项目,虽然我精通Java,但我的mongo技能充其量只是新手。 客户单例 我的服务器包含mongo客户端的静态单例: 注意: Mongo客户端对我来说是新的,我知道未能正确使用连池
我们正在尝试使用nodejs/mongo原生驱动程序实现下面演示(幻灯片13-18)中概述的策略。 https://www.slideshare.net/mongodb/securing-mongodb-to-serve-an-awsbased-multitenant-securityfanatic-saas-application 总结: 从node.js.创建到mongoDB的连接池 对于租户
问题内容: 我在以下代码中: 我想打印用户代理HTTP标头,并可能对其进行更改。可能吗? 问题答案: Selenium中无法读取请求或响应头。您可以通过指示浏览器通过记录此类信息的代理进行连接来实现。 在Firefox中设置用户代理 更改Firefox用户代理的通常方法是在Firefox配置文件中设置变量。请注意,这与硒无关。 您可以指示Selenium使用与默认配置文件不同的配置文件,如下所示:
我想使用. net mongo驱动程序监控当前连接池占用情况以每分钟生成统计数据(如5/MaxConnectionPoolsize繁忙)。但是我在我的驱动程序(2.8.1)中看不到任何选项。这可能吗? 对于js客户端的类似问题,我已经找到了一些答案,但遗憾的是,我无法将其应用于我的情况 如何获得MongoDB的已使用(和免费)连接数(从客户端角度)?
问题内容: 从Mongodb客户端,我们可以使用db.Collection.stats()来获取集合状态,例如: +记录数(计数) +磁盘 大小(storageSize) +索引(indexSizes) +平均对象大小(avgObjSize) 现在,我想使用Mongodb Java驱动程序从Web后端监视这些数据,请让我知道如何获取它们? 我已经提到:http : //mongodb.github
从Mongodb客户端,我们可以使用db.collection.stats()获取集合的状态,例如: +记录数(count) +磁盘上的大小(storageSize) +索引(indexsize) +平均对象大小(avgObjSize) 现在我想用Mongodb java驱动程序从web后端监控这些数据,请让我知道如何获取它们? 我提到了:http://mongodb.github.io/mong