【发布时间】:2017-10-05 15:56:25
【问题描述】:
我有一个这样的文档集合:
{
'email': 'daniele@gmail.com',
'calls':[
{
'day' : {'mm':9, 'dd':4},
'value' : "AA"
},
{
'day' : {'mm':9, 'dd':3},
'value' : "BB"
},
{
'day' : {'mm':9, 'dd':2},
'value' : "CC"
}
]
}
如何使用 Mongoose 仅更新所选日期的值? 我需要类似的东西:
用 XX 和 YY
更新第 2/9 天和第 3/9 天的值Users.findOneAndUpdate(
{
'email' : 'daniele@gmail.com',
'calls.day.mm' : 9,
'calls.day.dd' : {$in:[2, 3]}
},
{
'calls.$0.mm' : "XX",
'calls.$1.mm' : "YY"
});
结果应该是:
{
'email': 'daniele@gmail.com',
'calls':[
{
'day' : {'mm':9, 'dd':4},
'value' : "AA"
},
{
'day' : {'mm':9, 'dd':3},
'value' : "YY"
},
{
'day' : {'mm':9, 'dd':2},
'value' : "XX"
}
]
}
【问题讨论】:
-
抱歉,我编辑了我的问题。是关于“更新”而不是预测
-
可能是错的,但我不认为这是可能的。因为 mongo findAndModify 应用 query..find 文档,然后设置您指定的属性。在您的情况下,您进行智能更新,例如“将匹配 2 的值设置为 X,将匹配 3 的值设置为 Y”,mongo 不在乎这个..它只会更新您设置的内容...我建议运行 find ..更新您需要的内容并保存文档。
-
所以我应该
find({'email':'daniele@gmail.com'})用户,扫描所有user.calls.day.dd,并为每个==2 || ==3检查是否是==2 || ==3。然后修改调用,最后做@987654327 @。对吗? -
是的..找到用户..获取他所有的调用值,检查和更新你喜欢的属性。
-
但我又不是 100% 确定..也许有一个技巧可以按照你的方式去做。
标签: node.js mongodb mongoose mongodb-query