Php 如何改用MongoDB驱动程序重写Mongo客户端代码
背景信息: 我有一个PHP脚本,它解析文本文件并使用它将数据插入mongo数据库。我不再使用旧的Mongo PHP驱动程序,而是使用MongoDB\driver类() 问题 有一段代码我正试图用新类重写,但我似乎无法让它工作——也就是说,它没有将数据写入数据库。。。我也不知道如何找到错误 旧代码: 这是旧代码:Php 如何改用MongoDB驱动程序重写Mongo客户端代码,php,mongodb,Php,Mongodb,背景信息: 我有一个PHP脚本,它解析文本文件并使用它将数据插入mongo数据库。我不再使用旧的Mongo PHP驱动程序,而是使用MongoDB\driver类() 问题 有一段代码我正试图用新类重写,但我似乎无法让它工作——也就是说,它没有将数据写入数据库。。。我也不知道如何找到错误 旧代码: 这是旧代码: //database variables $m = new MongoClient("mongodb://127.0.0.1:27017"); $db = "locations"
//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;
}
如有任何建议,将不胜感激
编辑1
所以我更新了代码,它正在创建数据,但它看起来与以前的/旧的代码不同。
这是来自旧代码的数据的样子:
$bulk->update(
['domain'=>$status['domain']],
['$set'=>$status],
['multi' => false, 'upsert' => true]
);
$result = $m->executeBulkWrite(dbname.collectionname, $bulk, $writeConcern);
使用此代码:
我不希望它嵌套在另一个“域”数组下。您应该将代码更新到下面
您应该将代码更新到以下位置
我只需要调整你的代码来改变“['$set'=>['domain'=>$status]]”,变成“['$set'=>$status]”,我只需要调整你的代码来改变“['$set'=>['domain'=>$status]]”,变成“['$set'=>$status]”
array(0) {
}
{ "_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);