2015-08-25 68 views
1

Following.follow =函數(ID1,ID2,CB){ 的console.log(ID1)//返回馬特 的console.log(ID2)//返回西蒙蒙戈findAndModify返回null

Following.collection.findAndModify({ 
     query: { 
      ownerId: id1 
     }, 
     update: { 
      $addToSet: { 
       followedBy: id2 
      } 
     }, 
     upsert: true, 
     new: true 
    }, function(err, result, lastErrorObject) { 
     cb(err, result) 
     console.log(result) // returns null 
    }) 
} 

我使用Mocha運行測試,我的findAndModify函數只會返回null。我閱讀文檔,似乎無法弄清楚我做錯了什麼。 Upsert與true結合應該使文檔沒有找到,並且new應該返回修改後的對象。

+0

你的CB後調用的console.log ... 如果換成最後兩行,會發生什麼? '的console.log(結果); cb(err,result);' – Alex

回答

1

看起來這是錯誤的許多方面:

所有.findAndModify()這裏語法首先不適用於任何node.js的驅動程序,你可能是指.findOneAndUpdate()代替:

Following.collection.findOneAndUpdate({ 
    { "ownerId": id1 }, 
    { "$addToSet": { "followedBy": id2 } }, 
    { 
     "upsert": true, 
     "returnOriginal": false 
    }, 
    function(err, result) { 
     console.log(result); // if you don't call before the callback it never gets called. 
     cb(err, result); 
    } 
); 

第二種情況是.collection暗示這是來自「貓鼬」,所以使用貓鼬所具有的本地方法代替.findOneAndUpdate()

Following.findOneAndUpdate({ 
    { "ownerId": id1 }, 
    { "$addToSet": { "followedBy": id2 } }, 
    { 
     "upsert": true, 
     "new": true 
    }, 
    function(err, result) { 
     console.log(result); // if you don't call before the callback it never gets called. 
     cb(err, result); 
    } 
); 

這最後可能是你想要什麼,如果你身邊掠過需要區分喜歡的東西ObjectId字符串,你是不是手工處理這一點。貓鼬處理。本地驅動程序不會爲你做這件事,因爲它沒有「模式」來引用來制定「類型轉換」。

因此,使用應支持的方法。