从嵌套对象中拉出 - MongoDB PHP Driver

时间:2015-05-26 11:55:42

标签: php mongodb

我有一个看起来像这样的文件:

{
    "_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但没有用。感谢。

2 个答案:

答案 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);