【发布时间】:2017-05-09 12:19:57
【问题描述】:
背景信息:
我有一个 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
}
}
我不希望它嵌套在另一个“域”数组下。
【问题讨论】: