2014-07-23 22 views
2

我試圖使用貓鼬將項目添加到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是一個我確實加入後立即產生。上面的示例objectid是運行代碼的實際示例。

這種方法被稱爲從實際生成ObjectId的方法回調我試圖添加...是我的問題可能相關嗎?

任何幫助/想法爲什麼這可能會發生將不勝感激。

我發現this similar question對SO,但他們的解決方案似乎非常具體的他們的情況,我是不是能夠得到的答案有什麼想法?

+1

我試圖重新您的問題,在我的情況下,它總是能正常工作。還有什麼可能導致這種行爲。你是不是錯誤地在任何地方調用函數兩次? –

+0

也許這是一個字符串與ObjectId的情況? – ma08

回答