【发布时间】:2015-06-08 17:10:27
【问题描述】:
我正在尝试使用 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 ...我的问题可能与此有关吗?
任何关于为什么会发生这种情况的帮助/想法将不胜感激。
我在 SO 上找到了 this similar question,但他们的解决方案似乎非常适合他们的情况,我无法从那里的答案中得到任何想法......
【问题讨论】:
-
我正在尝试重新创建您的问题,就我而言,它总是可以正常工作。是否还有其他可能导致这种行为的事情发生。你不会在任何地方错误地调用一个函数两次吗?
-
可能是字符串 vs ObjectId 的情况?