2017-04-05 81 views
1

在我有一個蒙戈架構,看起來像這樣:

{ 
"_id" : ObjectId("58e4222497b2735ba3cd9ec4"), 
"place" : "", 
"plant" : "Test1", 
"eventDate" : ISODate("2017-04-05T00:00:00Z"), 
"event" : "Test123", 
"toBeTested" : [ 
    { 
     "_id" : ObjectId("58e453a07c9f94702ebac93d"), 
     "thingsTested" : [ 
      "A1", 
      "A2", 
      "A3" 
     ] 
    } 
]} 

我用貓鼬刪除的thingsTested一個元素。我的貓鼬的代碼是:

Layout 
    .update(
     {_id: req.params.parentid}, 
     {$pull: {toBeTested: {thingsTested: 'A3'}}}, 
     function (err, docs){ 
     if (err) { 
      res.send(err); 
     } 
      res.json(docs);  
     } 
    ); 

正如你所看到的,我硬編碼,我想從thingsTested集中刪除A3。但是,展出的行爲是所有thingsTested正在被刪除。

作爲後續問題,我怎麼能確保貓鼬命令僅在thingsTested消除A358e453a07c9f94702ebac93d(子ID)的_id

謝謝!

+0

的可能的複製[MongoDB的拉帶位置操作] (http://stackoverflow.com/questions/26319733/mongodb-pull-with-positional-operator) – Veeram

+1

羅,使用位置操作者,這將是不正確的。 – ChemicalRocketeer

回答

1

你將不得不在查詢中選擇一個外部數組元素,然後將匹配的元素可以用$引用,就像這樣:

//         ▼ selecting the toBeTested element 
update({_id: req.params.parentid, 'toBeTested.thingsTested': 'A3'}, 
//       ▼ referencing the selected element 
     {$pull: {'toBeTested.$.thingsTested': 'A3'}}}); 
+0

我如何將添加參照具體''thingsTested' _id'('58e453a07c9f94702ebac93d')? –

+1

我不知道你的意思到底是什麼,因爲'你的樣本數據thingsTested'元素沒有一個'_id'但我認爲你只是必須把它在查詢某個地方,這樣你只匹配具有該ID的文檔。也許是這樣的:'{_id:req.params.parentid, 'toBeTested.thingsTested': 'A3', 'toBeTested.thingsTested.A3._id':[ID]}'。您可以根據需要爲查詢添加儘可能多的參數,它只會匹配匹配所有參數的文檔。 – ChemicalRocketeer

+0

我的歉意,我的意思是'toBeTested'有一個'_id'。但這是有幫助的!謝謝! –