2012-09-28 46 views
1

任何一個幫助我創建mongo查詢刪除「名稱」:「gdfgdfgdfg」嵌入式文件如何在mongo中爲嵌入對象創建查詢?

對象存儲在下面的mongo db。

{ 
    "_id": ObjectId("50656f33a4e82d3f98291eff"), 
    "description": "gdfgdfgdfg", 
    "menus": [ 
    { 
     "name": "gdfgdfgdfg"**, 
     "description": "dfgdgd", 
     "text": "dfgdfg", 
     "key": "2", 
     "onSelect": "yyy", 
     "_id": ObjectId("50656f3ca4e82d3f98291f00") 
    }, 
    { 
     "name": "dfg", 
     "description": "dfgdfgdfgdf", 
     "text": "dfgdgf", 
     "key": "1", 
     "onSelect": "uuuu", 
     "_id": ObjectId("50656f44a4e82d3f98291f01") 
    } 
    ] 
} 

任何一個可以幫助我,我新來蒙戈

+0

感謝編輯,即時通訊新的StackOverflow ... – user1705980

回答

1

在JavaScript的外殼,你可以這樣做:

var query = {"_id": ObjectId("50656f33a4e82d3f98291eff")}; 
db.collection.update(query, {'$pull':{ menus: {name : 'gdfgdfgdfg'} } }); 

或使用該ID。

db.collection.update(query, {'$pull': { menus: {"_id": ObjectId("50656f3ca4e82d3f98291f00")} } }); 

隨着Java驅動程序應該是這樣的:

BasicDBObject query = new BasicDBObject("_id", new ObjectId("50656f33a4e82d3f98291eff")); 

BasicDBObject docToRemove = new BasicDBObject("name", "gdfgdfgdfg"); 

BasicDBObject updateCommand = new BasicDBObject("$pull", new BasicDBObject("menus", docToRemove)); 

collection.update(query, updateCommand); 
+0

非常感謝,工作很好。 – user1705980

+0

如何更新我已經嘗試這樣BasicDBObject更新命令=新BasicDBObject( 「$集」,新BasicDBObject( 「菜單」,docToRemove)); – user1705980

+0

update()函數來自集合。 'DBCollection collection = db.getCollection(「test」); collection.update(query,updateCommand);' –

-1
$conditionArray=array("_id"=>ObjectId("50656f33a4e82d3f98291eff")); 
$dataArray=array("description"=>""); 
$db->$collectionName->update($conditionArray,array('$unset' =>$dataArray))->limit(1); 
+0

謝謝,但我想只刪除頭文件{ 「名稱「: 「gdfgdfgdfg」 **, 「描述」: 「dfgdgd」, 「文本」: 「dfgdfg」, 「鑰匙」: 「2」, 「ONSELECT」: 「YYY」, 「_id」:的ObjectId在菜單( 「50656f3ca4e82d3f98291f00」) }。 – user1705980

+0

這是無稽之談。它只會刪除描述字段。 – Lanbo

0

蒙戈不會讓你刪除嵌入文檔。什麼,你需要做的是把對象從集合,刪除列表中的一個對象,然後將其重新保存到數據庫中。

obj = db.collection.findOne({"_id": ObjectId("50656f33a4e82d3f98291eff")}); 
menus = obj.menus.splice(0,1); // Or some other way to manually delete 
           // the one item in the list 
db.collection.update({"_id": ObjectId("50656f33a4e82d3f98291eff")}, 
        {$set: {menus: menus}}); 

這很複雜,請參閱here

編輯:如果你不知道的指數,你可以試試這個:

obj = db.collection.findOne({"_id": ObjectId("50656f33a4e82d3f98291eff")}); 
var i = 0; 
for(i=0;i<obj.menus.length;i++) { 
    if(obj.menus[i].name === "gdfgdfgdfg") 
     break; 
} 
menus = obj.menus.splice(i,1); 
db.collection.update({"_id": ObjectId("50656f33a4e82d3f98291eff")}, 
        {$set: {menus: menus}}); 
+0

謝謝。它可以幫助我,是我能夠刪除文件,而無需使用「_id」拼接:物件(「50656f3ca4e82d3f98291f00」),它需要一些具體的事情我 – user1705980

+0

曾嘗試這下面的代碼,但其刪除整個文件寫結果結果= db.collection。刪除(新BasicDBObject( 「_ ID」 的ObjectId( 「50656f33a4e82d3f98291eff」)),WriteConcern.NORMAL)); – user1705980

+0

在MongoDB中,嵌入文檔是*不*的處理方式收集文件相同。沒有查詢來刪除單個數組成員。你必須手動完成。 – Lanbo

相關問題