我正在尝试输入每个family
文档,并在每个文档上检查users array
中是否存在与结果匹配的user
(用户是object
),然后更新特定的one。
我如何才能使查询通过文档,并且在每个用户中,如果符合条件,就更新它?
第一次尝试代码:
var From_joinedTime = new Date().getTime() - (60*60*24*2*1000);
return Family.updateMany({"users.permission" : 0, "users.joined_date" : {$lte: From_joinedTime}},{$set: {"users.$.permission" : 1}},{multi:true}).then(function (response) {
return response;
});
请注意:
我试着在谷歌上搜索,发现了同样的问题,并尝试了尼尔·卢恩的答案:How to Update Multiple Array Elements in mongodb
从Neil Lunn修改的代码
Family.update(
{ "users.permission":0, "users.joined_date": {$lte: From_joinedTime}},
{ "$set": { "users.$[elem].permission": 1 } },
{ "arrayFilters": [{ "users.permission": 0,
"users.joined_date": {$lte: From_joinedTime} }], "multi": true }
)
但那失败了。
我发现这个问题有同样的问题,但我找不到足够好的答案:Cannot read property 'castForQuery' of undefined at castArrayFilters in Node.js
错误:
(node:9740) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'castForQuery' of undefined
at castArrayFilters (\node_modules\mongoose\lib\helpers\update\castArrayFilters.js:60:37)
at _castArrayFilters (\node_modules\mongoose\lib\query.js:1736:5)
at model.Query._updateThunk (\node_modules\mongoose\lib\query.js:3449:3)
at model.Query.<anonymous> (\node_modules\mongoose\lib\query.js:3535:23)
at model.Query._wrappedThunk [as _execUpdate] (\node_modules\mongoose\lib\helpers\query\wrapThunk.js:16:8)
at process.nextTick (\node_modules\kareem\index.js:369:33)
at process._tickCallback (internal/process/next_tick.js:61:11)
我该怎么办?
发布于 2019-03-18 10:19:34
请尝试此查询:-
Family.update(
{ "users.permission":0, "users.joined_date": {$lte: From_joinedTime}},
{ "$set": { "users.$.permission": 1 } },
{ "multi": true }
)
位置运算符$将负责更新数组中的匹配用户。
https://stackoverflow.com/questions/55212774
复制相似问题