2016-11-24 138 views
3

我要的是:findOneAndUpdate插入後返回null?

  1. 回報1如果插入成功,即使該文件不存在之前。
  2. 回報1如果更新成功

但我似乎不能findOneAndUpdate這僅當文檔存在併成功更新返回一個結果來實現這一目標。

我的查詢:

User.findOneAndUpdate(
    { email: email }, 
    { $set: { verified: 1 } }, 
    { upsert: true } 
).exec(callback); 
+0

查看[**'WriteResult' **](https://docs.mongodb.com/manual/reference/method/WriteResult/)文檔。 – chridam

回答

0

假設你想要得到的結果是更新後的文檔,則需要修改您的查詢,看起來像這樣:

User.findOneAndUpdate(
    { email: email }, 
    { $set: { verified: 1 } }, 
    { upsert: true, returnNewDocument: true } 
).exec(callback); 

returnNewDocument屬性將回調返回更新的文件,而不是原件。對於不存在的文檔上的upsert,它將返回新文檔而不是空集。

1

你可以訪問本地驅動程序來調用底層集合的updateOne()updateMany()方法,它將從蒙戈在updateWriteOpCallback回調返回完整的響應,你可以使用一個updateWriteOpResult對象。例如

User.collection.updateOne(
    { "email": email }, 
    { "$set": { "verified": 1 } }, 
    { "upsert": true }, 
    function(err, result) { 

     // The number of documents that matched the filter. 
     console.log(result.matchedCount); 

     // The number of documents that were modified.  
     console.log(result.modifiedCount); 

     // The number of documents upserted. 
     console.log(result.upsertedCount); 

     // The total count of documents scanned. 
     console.log(result.result.n);  

     // The total count of documents modified. 
     console.log(result.result.nModified); 
    } 
); 

在這種情況下,你最有可能需要檢查result.result.nModifiedresult.upsertedCount性質作出上述呼籲。