我有一个看起来像这样的文件:
{
"_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但没有用。感谢。
答案 0 :(得分:0)
解决。
$a1 = $a['package'];
if(($key = array_search($package, $a1)) !== false) {
unset($a1[$key]);
}
$serversCollection->update(array("uuid" => $a['uuid']), array('$set' => array("package" => $a1)));
答案 1 :(得分:0)
根据您的文档结构package
是一个对象并删除对象数据,您应该使用mongo $unset并查询为:
db.collectionName.update({},{"$unset":{"package.hub_fly":""}},false,true)
false
表示upsert,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);