簡體   English   中英

MongoDB findAndModify:>>>在文檔數組中查找和更新對象

[英]MongoDB findAndModify: >>> find and update object in document's array

題 :

我嘗試照顧文檔數組中的對象並對其進行更新。

語法下面給了我想要的對象,但是我不知道如何更新這個對象。 我試圖在findAndModify中使用此語句,但似乎無法在findAndModify方法中使用$ elemMatch

  db.users.find({"username":"username"},{"array":{$elemMatch:{"name":"name"}}})

我嘗試更改示例JSON

[{
"_id": ObjectId("5501b8fb77382c23704543fd"),
"username": "ker",
"password": "ker",
"character": "pet",
"visits": [],
"pets": [{"name": "Jura", "kind": "dog", "age": "2"}, {"name": "Ala",  "kind": "dog", "age": "5"}]
}, {
"_id": ObjectId("5501b8fb77382c23704543fd"),
"username": "mer",
"password": "mer",
"character": "pet",
"visits": [],
"pets": [{"name": "Ita", "kind": "cat", "age": "6"}, {"name": "Esa", "kind": "cat", "age": "1"}]
 }]

摘要:

我必須在集合中找到文檔,然后在文檔的數組中找到對象並更新此對象。

所以我的邏輯看起來像這樣

 db.collection.findAndModify({query:{Find Document In Collection THEN in document's array(pets) find object}, update:{$set:{New Values For Object}}})

您可以運行以下查詢以實現所需的功能:

//findAndModify will always refer to one document
db.collection.findAndModify({

    //Find the desired document based on specified criteria
    query: { username: 'mer', pets: { $elemMatch: { name: 'Esa'}}},

    //Update only the elements of the array where the specified criteria matches
    update: { $set: { 'pets.$.name': 'CHANGED'}}
});

此查詢將更新第二個文檔:

{
        "username" : "mer",
        "password" : "mer",
        "character" : "pet",
        "visits" : [ ],
        "pets" : [
                {
                        "name" : "Ita",
                        "kind" : "cat",
                        "age" : "6"
                },
                {
                        "name" : "CHANGED",
                        "kind" : "cat",
                        "age" : "1"
                }
        ]
}

您可以在此處閱讀更多有關使用$位置運算符更新文檔的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM