如何将项目推入数组内对象的数组内

时间:2020-10-21 19:26:51

标签: mongodb mongodb-query

我在MongoDB中具有以下对象

 {
    "_id": {
        "$oid": "5f7274fe0fef0e383459e3ae"
    },
    "pwd": "$2a$10$AmA3lqNRdt315pgA3z9vNOkFMwisnu5zfcq0qVJzVSVm/0VYy3uQu",
    "daysfree": [{
        "date": {
            "$date": "2020-10-12T21:00:00.000Z"
        },
        "friends": ["pota", "toto", "loto"]
    }]
}

{
    "_id": {
        "$oid": "5f7b372d1c70e33c1cc41ec3"
    },
    "pwd": "$2a$10$H.2LGua3T2/wRhik792RtuPHJSzhRSJj5f6eV5bz/iGHywQ7Ylr2y",
    "daysfree": [{
        "date": {
            "$date": "2020-10-12T21:00:00.000Z"
        },
        "friends": ["hi", "hilo", "pota", "toto", "loto", "pota", "toto", "loto"]
    }]
}

我想更新它们,以便对于每个文档,如果 { "_id": { "$oid": "5f7274fe0fef0e383459e3ae" }, "pwd": "$2a$10$AmA3lqNRdt315pgA3z9vNOkFMwisnu5zfcq0qVJzVSVm/0VYy3uQu", "daysfree": [{ "date": { "$date": "2020-10-12T21:00:00.000Z" }, "friends": ["pota", "toto", "loto"] }] } { "_id": { "$oid": "5f7b372d1c70e33c1cc41ec3" }, "pwd": "$2a$10$H.2LGua3T2/wRhik792RtuPHJSzhRSJj5f6eV5bz/iGHywQ7Ylr2y", "daysfree": [{ "date": { "$date": "2020-10-12T21:00:00.000Z" }, "friends": ["hi", "hilo", "pota", "toto", "loto", "pota", "toto", "loto"] }] } 包含一个对象,该对象的字段daysfree设置为date,则在相同的确切对象中推入{{ 1}}一个新的字符串。

以下是我尝试执行的查询,仅完成一半的工作。 "2020-10-12T21:00:00.00Z"

friends

问题在于查询仅更新第一个文档,而不更新两个文档。

致谢。

1 个答案:

答案 0 :(得分:0)

update仅更新第一个匹配的文档。使用updateMany(我更喜欢)或放置可选参数{multi: true}

db.collection.update({
    "daysfree":{
        $elemMatch:{
            "date":{
                "$gte":ISODate("2020-10-12T00:00:00Z"),
                "$lt": ISODate("2020-10-13T00:00:00Z")
                }
            }
        }
    },
    { $push:{ "daysfree.$.friends":"Josef" } },
    { multi: true }
);

db.collection.updateMany({
    "daysfree":{
        $elemMatch:{
            "date":{
                "$gte":ISODate("2020-10-12T00:00:00Z"),
                "$lt": ISODate("2020-10-13T00:00:00Z")
                }
            }
        }
    },
    { $push:{ "daysfree.$.friends":"Josef" } },
);