我正在尝试使用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,但他们的解决方案似乎对他们的情况非常具体,我无法从答案中得到任何想法......
答案 0 :(得分:0)
根据API文档,该属性' new'在选项字段中,返回修改后的文档需要为true。否则,它默认返回原始文档。
http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate