node.js - Mongoose:为什么 $addtoset 添加不正确的 ObjectId

标签 node.js mongodb mongoose

我正在尝试使用 mongoose 将项目添加到 ObjectId 数组中 - 我使用 $addtoset 因为我只想在项目尚不存在时添加该项目。

但是我的行为很奇怪。 $addtoset 正在将一个 objectId 附加到数组中,但它不是我传递给它的那个。

我已经从代码中删除了其他所有内容,以尝试缩小范围,现在该方法如下所示简单,但它仍在发生。

userSchema.statics.addPlaylistToUser = function(user, playlistId, done){

    var toss =  playlistId.toString(); //I verify at this point the playlistId is correct, eg. ObjectId("53cf855ac551004417e54da2") 

    User.findByIdAndUpdate(
        user._id,
        {$addToSet: {playlists: playlistId } },
        {safe: true, upsert: false},
        function(err, model) {
//at this point, an object Id has been added to the array, but it is not the same as verified above, the objectid added is eg. ObjectId("53cf8572c551004417e54da4")
                done(err, model);
        })
    }

有趣的是,ObjectId 始终几乎相同,这表明新的 ID 是在我实际添加的 ID 之后立即生成的。上面的示例 objectid 是运行代码的实际示例。

此方法是在回调中从实际生成我要添加的 ObjectId 的方法中调用的...我的问题可能与此相关吗?

任何关于为什么会发生这种情况的帮助/想法将不胜感激。

我找到了this similar question就这样,但他们的解决方案似乎非常适合他们的情况,我无法从那里的答案中得到任何想法......

最佳答案

根据 API 文档,选项字段中的属性“new”必须为 true 才能返回修改后的文档。否则,默认返回原始文档。

http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

关于node.js - Mongoose:为什么 $addtoset 添加不正确的 ObjectId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24907999/

相关文章:

linux - MongoDB auth=true 集群管理员仍然缺乏权限

javascript - MongoDb - 具有空值的有界数组显示无界

javascript - 保存或更新 Mongoose

javascript - 在 JADE 中完成 if-else 条件 block

javascript - 将数据附加/插入到 MongoDB 中

javascript - 回调不是一个函数(但它是)

C# mongodb driver 2.0 - 如何在批量操作中更新插入?

javascript - Mongoose 保存一个空对象

javascript - 我如何在 Express 4.x 中将路由 Controller 链接在一起?

node.js - Node JS 使用自定义 header 调用 GRPC 服务器