我在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
问题在于查询仅更新第一个文档,而不更新两个文档。
致谢。
答案 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" } },
);