Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从嵌套对象中提取-MongoDB PHP驱动程序_Php_Mongodb - Fatal编程技术网

从嵌套对象中提取-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);