2015-05-26 83 views
0

我有一个文件,看起来像这样:拉 - MongoDB的PHP驱动

{ 
    "_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

按照您的文档结构package是对象和对象数据删除您应该使用蒙戈$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); 
+0

这两个都是正确的,谢谢你的回复。 – JoshTheDev

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