2017-03-31 12 views
0

mongodbクエリを作成して、一度ドキュメントを更新し、値を持つフィールドをいくつか設定し、既にフィールドがある場合は設定されている)それらを設定解除します。MongoDB:updateOneクエリが存在する場合には未設定値を設定する

私はこのようにそれをやった:field1,2または3が文書内に存在していない場合は今問題がある

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

        } 
       }) 

問合せは、フィールド4の設定に失敗したと5

mongoのクエリに欠けているフラグはありますか? 助けてください。

EDIT:ソリューション

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": {} })を使用してください。

updateOneにはfilterという引数がありません。 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" 

     } 
    } 
) 
関連する問題