【问题标题】:MongoDB findAndModify: >>> find and update object in document's arrayMongoDB findAndModify: >>> 在文档数组中查找和更新对象
【发布时间】:2015-03-13 19:53:08
【问题描述】:

问题:

我尝试查看文档数组中的对象并更新它。

下面的语法给我我想要的对象,但我不知道如何更新这个对象。我尝试在 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}}})

【问题讨论】:

  • 我不清楚这个问题到底是什么。您能否向我们展示一个示例文档,然后向我们展示您希望它如何更改?请将示例文档编辑到问题中。
  • 我更新了问题,查看我试图表达我的想法和我试图实现的目标的最后陈述

标签: javascript arrays mongodb express


【解决方案1】:

您可以运行以下查询以实现您要查找的内容:

//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"
                }
        ]
}

您可以阅读有关使用$ 位置运算符here 更新文档的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多