首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mongodb一次更新多个数组对象

Mongodb一次更新多个数组对象
EN

Stack Overflow用户
提问于 2019-03-18 06:56:41
回答 1查看 153关注 0票数 1

我正在尝试输入每个family文档,并在每个文档上检查users array中是否存在与结果匹配的user (用户是object),然后更新特定的one。

我如何才能使查询通过文档,并且在每个用户中,如果符合条件,就更新它?

第一次尝试代码:

代码语言:javascript
复制
            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修改的代码

代码语言:javascript
复制
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

错误:

代码语言:javascript
复制
(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)

我该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2019-03-18 10:19:34

请尝试此查询:-

代码语言:javascript
复制
Family.update(
                { "users.permission":0, "users.joined_date":  {$lte: From_joinedTime}},
                { "$set": { "users.$.permission": 1 } },
                { "multi": true }
            )

位置运算符$将负责更新数组中的匹配用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55212774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档