我是mongodb的新手,我有一个包含对象数组的人员集合,我需要用今天的日期更新不到2个月前的所有“a.b.c.日期”
{
"_id" : "xxxxxxxxxxxxxxx",
"a" : {
"b" : {
"c" : [
{
"date" : ISODate("2021-01-01T09:02:53.217Z"),
"value" : "aaa"
},
{
"date" : ISODate("2022-01-01T09:03:38.948Z"),
"value" : "bbb"
},
{
"date" : ISODate("2023-01-01T09:15:03.376Z"),
"value" : "ccc"
}
]
}
},
}
{
"_id" : "yyyyyyyyyyyyyyy",
"a" : {
"b" : {
"c" : [
{
"date" : ISODate("2021-01-01T09:02:53.217Z"),
"value" : "aaa"
},
{
"date" : ISODate("2023-01-01T09:03:38.948Z"),
"value" : "bbb"
},
{
"date" : ISODate("2023-01-01T09:15:03.376Z"),
"value" : "ccc"
}
]
}
},
}
我尝试了此查询,但它只修改每个人的1条记录
db.getCollection('people').update({"a.b.c.date": {$lt: ISODate("2022-11-19")}},
{$set: {"a.b.c.$.date": ISODate('2023-01-19T01:07:42.313+00:00')}}, {multi: true})
我希望所有日期都在2023年
1条答案
按热度按时间zzlelutf1#
From the update positional
$
operator,位置操作符$充当与查询文档匹配的第一个元素的占位符
若要更新数组中匹配的所有项,应使用位置筛选运算符
$[<identifier>]
。Demo @ Mongo Playground