从嵌套对象中提取-MongoDB PHP驱动程序
我有一个文件,看起来像这样:从嵌套对象中提取-MongoDB PHP驱动程序,php,mongodb,Php,Mongodb,我有一个文件,看起来像这样: { "_id" : ObjectId("54e7b8f17713989198839194"), "uuid" : "dbf4966a-1b94-45d9-ad65-11d4c1a84d08", "economy_tokens" : 18367, "player_name" : "JoshTheDev", "player_name_lower" : "joshthedev", "last_login" : ISODate
{
"_id" : ObjectId("54e7b8f17713989198839194"),
"uuid" : "dbf4966a-1b94-45d9-ad65-11d4c1a84d08",
"economy_tokens" : 18367,
"player_name" : "JoshTheDev",
"player_name_lower" : "joshthedev",
"last_login" : ISODate("2015-05-24T22:28:50.456Z"),
"login_count" : 4236,
"names" : [
"JoshTheDev"
],
"package" : {
"hub_fly" : true
},
"first_login" : ISODate("2015-02-21T09:40:05.069Z"),
"economy_gems" : 999993201,
"economy_nether_drops" : 100068
}
我希望从包对象中删除“hub_fly”。我该怎么做(PHP驱动程序,Java驱动程序很容易做到这一点)?我尝试过不同的变体,例如$pull和$unset,但没有效果。谢谢。问题解决了
$a1 = $a['package'];
if(($key = array_search($package, $a1)) !== false) {
unset($a1[$key]);
}
$serversCollection->update(array("uuid" => $a['uuid']), array('$set' => array("package" => $a1)));
根据您的文档结构,
包
是一个对象,在对象数据中删除,您应该使用mongo并按如下方式查询:
db.collectionName.update({},{"$unset":{"package.hub_fly":""}},false,true)
false
用于向上插入,而true
用于多重插入
这应该在java驱动程序中,如下所示:
BasicDBObject unsetDocument = new BasicDBObject();
unsetDocument.append("$unset", new BasicDBObject().append("package.hub_fly", ""));
BasicDBObject searchQuery = new BasicDBObject();
collection.update(searchQuery, unsetDocument,false,true);