Node.js Mongoose:为什么$addtoset添加了不正确的ObjectId
我试图使用mongoose将一个项目添加到ObjectId的数组中-我使用$addtoset,因为我只希望在项目不存在时添加该项目 然而,我的行为变得非常奇怪$addtoset正在向数组追加objectId,但它不是我要传递给它的对象 我已经从代码中删除了所有其他内容,以尝试缩小范围,现在该方法与下面一样简单,它仍然在发生Node.js Mongoose:为什么$addtoset添加了不正确的ObjectId,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图使用mongoose将一个项目添加到ObjectId的数组中-我使用$addtoset,因为我只希望在项目不存在时添加该项目 然而,我的行为变得非常奇怪$addtoset正在向数组追加objectId,但它不是我要传递给它的对象 我已经从代码中删除了所有其他内容,以尝试缩小范围,现在该方法与下面一样简单,它仍然在发生 userSchema.statics.addPlaylistToUser = function(user, playlistId, done){ var toss
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的方法在回调中调用的。。。我的问题可能与此有关吗
如果您能提供任何关于为什么会发生这种情况的帮助/想法,我们将不胜感激
我发现是这样的,但他们的解决方案似乎非常特定于他们的情况,我无法从答案中得到任何想法…根据API文档,选项字段中的属性“new”必须为true才能返回修改过的文档。否则,它默认返回原始文档
我正在尝试重新创建您的问题,在我的情况下,它总是运行良好。是否还有其他可能导致这种行为的因素。你是不是在任何地方错误地调用了一个函数两次?也许是string对ObjectId的情况?