2017-03-31 67 views
0

我期待創建一個mongodb查詢來更新一次文檔,以便它將設置幾個字段的值,並且如果已經有字段可用(其他字段不是設置)取消設置。MongoDB:updateOne查詢,設置未設置的值,如果存在

我做了這樣的:

db.collection('collectionName").find({"itemId": itemsDataArray[i].itemId }).updateOne(
       { "$unset" : 
        { 
         "field1": 1, 
         "field2": 1, 
         "field3": 1 
        } 
       }, 
       { "$set": 
        { 
         "field4" : "value", 
         "field5" : "value" 

        } 
       }) 

現在的問題是,如果field1,2或3是不存在的文件中,則查詢失敗設置字段4和5

有沒有我在mongo查詢中缺少的標誌? 請幫忙。

編輯:解決方案

db.collection('collectionName').find({"itemId": itemsDataArray[i].itemId }).updateOne(
       { "$unset" : 
        { 
         "field1": 1, 
         "field2": 1, 
         "field3": 1 
        }, 
        "$set": 
        { 
         "field4" : "value", 
         "field5" : "value" 

        } 
       }) 

回答

2

我覺得你有括號錯誤。您正在使用.collection(...).find(...).updateOne({"$unset" :{} }, {"$set": {} })。您可以使用.collection(...).find(...).updateOne({"$unset" :{}, "$set": {} })

請注意,您錯過了filter參數updateOne。你看過findOneAndUpdate

最後,這可能是一個複製/粘貼錯誤,但引號在集合訪問中不匹配(collection('name"))。

+0

謝謝。問題是使用括號。 –

1

請閱讀文檔updateOne

第一個參數是一個過濾器。你試圖達到的應該是:

db.d.updateOne(
    {"itemId": itemsDataArray[i].itemId}, 
    { 
     "$unset": 
      { 
       "field1": 1, 
       "field2": 1, 
       "field3": 1 
      }, 

     "$set": 
     { 
      "field4" : "value", 
      "field5" : "value" 

     } 
    } 
)