2017-05-11 56 views
0

下面是我的代碼commant db.slist.findOne()添加文件到嵌入式陣列

如何添加一個id與「INAME」爲「肥皂」後陣回來了? 我需要編寫一個查詢來蒐集集合中的所有「itemlist」數組,並且如果嵌入文檔中的任何文檔的「iname」爲「Soap」,則應在「iname:」Soap上方插入一個新行「Soap」作爲「項目Id」,並設置項目ID自己。有人能幫我找到了正確的查詢呢?

而且這似乎是一個很難回答的問題,請讓我知道,如果你發現很難理解的問題。

{ 
    "_id" : ObjectId("5914213e9f75f9119575c1d7"), 
    "name" : "Athif", 
    "age" : 23, 
    "address" : { 
     "house" : "675/38B", 
     "street" : "West Hill", 
     "city" : "Chungam", 
     "pincode" : 676507 
    }, 
    "itemlist" : [ 
     { 
      "iname" : "Soap", 
      "quantity" : 2, 
      "price" : 10, 
      "rate" : 20 
     }, 
     { 
      "iname" : "helmet", 
      "quantity" : 1, 
      "price" : 500, 
      "rate" : 500 
     }, 
     { 
      "iname" : "Table", 
      "quantity" : 2, 
      "price" : 5000, 
      "rate" : 10000 
     } 
    ] 
} 
+0

在itemlist數組中可以有多個對象作爲「Soap」? – Shrabanee

+1

查看鏈接http://stackoverflow.com/documentation/mongodb/1683/crud-operation/22368/update-of-embedded-documents#t=201705111314015170307。這將幫助你瞭解你能做什麼。 – Shrabanee

回答

1

對於更新數組元素,mongodb提供了位置運算符$。當您應用查詢來查找任何數組元素時,位置運算符$保留了該位置可以在更新操作中修改的嵌入式文檔。因此,在這裏你去!(假設你的收藏名稱是演示)

db.demo.update({ "itemlist.iname":"Soap" }, { $set:{"itemlist.$.itemID":"your_id"}}) 
+0

謝謝你,工作。如果你不介意,還有一個問題,上面的代碼只是爲這個特定對象更新文檔。如果我有另一個對象,另一個有購物清單的人,並且他的「itemlist」中有「Soap」,我可以使用單個命令同時將「itemId」添加到「Soap」文檔中嗎?或者,我是否需要分別爲他們的項目列表中的「肥皂」單獨執行此操作? –

+0

把它修好了。使用updateMany而不是更新。謝謝:) –

+0

歡迎! @HishamMubarak你應該記住,如果'itemlist'有更多帶有'iname' soap的文檔,它會將更新應用到第一個匹配的文檔,其他的不變。 – nurulnabi