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

我正在尝试使用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是在我实际添加的那个之后立即生成的。 上面的例子objectid是运行代码的实例。

这个方法是从一个实际产生ObjectId的方法的callback中被调用的,我试图添加…是我的问题,也许呢?

任何帮助/想法为什么这可能会发生将不胜感激。

我发现这个类似的问题 ,但他们的解决scheme似乎非常具体到他们的情况,我不能从那里的答案得到任何想法…

根据API文档,选项中的属性“new”字段对于返回修改后的文档需要为true。 否则,默认情况下会返回原始文档。

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