Mongoose:为什么$ addtoset添加不正确的ObjectId

时间:2014-07-23 10:28:21

标签: 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);
        })
    }

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

这个方法是在一个方法的回调中调用的,该方法实际上生成了我试图添加的ObjectId ......我的问题可能与我有关吗?

对于为什么会发生这种情况的任何帮助/想法都将非常感激。

我在SO上发现了this similar question,但他们的解决方案似乎对他们的情况非常具体,我无法从答案中得到任何想法......

1 个答案:

答案 0 :(得分:0)

根据API文档,该属性' new'在选项字段中,返回修改后的文档需要为true。否则,它默认返回原始文档。

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