这个问题已经在这里有了答案:

这是我的架构:

    var User = new Schema({
        name: {type: String, required: true},
        email: {
            address: String,
            confirmed: Boolean,
            confirm_code: String
        },
        saved_artists: [Schema.ObjectId],
        new_releases: [Schema.ObjectId],
        sync_queue: {
            id: Number,
            status: String
        }
    });

var Artist = new Schema({
    spotify_id: {type: String, required: true},
    name: {type: String, required: true},
    recent_release: {type: {
        id: String,
        title: String,
        release_date: String,
        images: []
    }, required: true},
    users_tracking: [Schema.ObjectId]
});

这是我的更新查询:

User.update({_id: {$in: artist.users_tracking}}, {$addToSet: {'new_releases': artist._id}}, function (err) {
        if (err) {
            // todo turn into debug report
            console.log(err);
        }
        User.find({}, function (err, users) {
            console.log(users);
        })
    })

当我运行单元测试时,$ in仅选择数组的第一个_id并更新该数组的第一个_id ,而忽略其他任何一个。 输入数组如下所示:

["5993864f44456a1b50378bc3","5993864f44456a1b50378bc4"]

如果我像下面这样迭代地运行更新查询,它将正确输出:

for (var i =0; i < artist.users_tracking.length; i++){
        User.update({'_id': artist.users_tracking[i]}, {$addToSet: {'new_releases': artist._id}}, function(err) {

        })
    }

#1楼 票数:0 已采纳

User.update()更改为User.updateMany()提供预期的查询输出。

#2楼 票数:0

您还可以将multi选项设置true

User.update({
    _id: { $in: artist.users_tracking }
}, { 
    $addToSet: { new_releases: artist._id }
}, { 
    multi: true 
}, ...)

  ask by Ryan translate from so

未解决问题?本站智能推荐:

1回复

使用数组过滤器(MongoDB)时不能使用聚合运算符$add来更新日期

下面是下面 User 集合中的文档示例。 如果“记忆”字段为假,我需要更新“learnt_item”中的所有嵌套文档。 更新内容是: “暂停日期”为空 “暂停”为假 根据“pause_date”和当前时间之间经过的持续时间更新“next_review”中的 ISOdate。 例如 pause_
1回复

mongodb/mongoose基于数组运算符$size创建索引?

是否可以使用数组运算符$ size在集合上创建部分索引? 例如,如果我有一个带数组字段comments:[type:String]的blogPost模式,是否可以基于每个blogPost的评论数来索引该集合
1回复

查找引用ID在数组中的所有文档

所以我有CourseSchema ,在里面,我有: 现在,我想为一位老师查找所有课程。 我想象做这样的事情: 但这总是返回空数组[]。 现在,我的猜测是因为教师字段是一个数组,而不仅仅是一个字符串。 那么对于数组.where()是否有替代方法? 另外,我是否需要.populat
1回复

使用Javamonogodb的查找运算符的限制字段

我有一个带有嵌入式文档数组的用户集合,其中包含他的朋友的ID。 我想获得所有朋友的ID,其中_id =“ 11”; 我正在尝试通过Java代码使用它 但我收到此错误: 类型为MongoCollection的方法find(Bson,Class)不适用于参数(BasicDBObje
2回复

在ID数组中搜索具有相同ID的mongoose上的多个文档

我有一个小问题,我正在使用带有 mongoose 的 NoSQL 数据库,并且我有两个包含 ID 数组的文档 我想搜索每个包含一个房间 ID 的文档,例如5efbb6d0531e4a5c0c08d06b ,它在两个文档中
1回复

在Mongo中,映射数组并更新文档

我正在尝试在 mongo 中更新多个文档。 我有一个数组,我想用该数组中的特定对象更新多个 mongo 文档。 我试过这个来更新 mongo: 如果我检查项目,它实际上已经更新了数组: 但是当我查看我的数据库时,MongoDB 还没有更新。 任何建议我做错了什么? 谢谢!
1回复

如何更新mongodb中的嵌套数组文档

我有一个集合看起来像 由于嵌套,我无法更新innerBlock数组的字段,特别是名称,状态。 基本上,我想更新提到的字段。我已经尝试过这个查询 它显示了下面给出的错误 我不知道如何修复它。在mongo shell中可以查询什么? 谢谢。
1回复

Mongoose/MongoDB-无法更新子文档

我正在寻找这样的子文档: 它可以正确找到被警报者。 但是,当我更新时,它无法保存警报对象。 仅当警报对象在数组中的位置不是第一个位置时,才会发生这种情况。 可以找到并更新警报对象数组中的第一个警报对象。 我究竟做错了什么?