sql >> データベース >  >> NoSQL >> MongoDB

MongoDBにネストされたオブジェクトが存在する場合は更新し、存在しない場合は追加します。

    存在しない場合にドキュメントを挿入するには、upsertによって実行されます。条件付き埋め込みドキュメントを更新する場合は、$定位置演算子が必要です。したがって、上記の機能を実装するには、クエリで両方を使用する必要があります。

    ただし、現時点では、mongodbは$位置演算子を使用したアップサーティングをサポートしていません

    したがって、現時点では1つのクエリで実行することはできません。あるいは、2つのクエリで実行することもできます。

    最初

    db.collection('ratings').update(
      {"refid":refid, "votes.ip": ip},
      {
         $set: { "votes.$.rating":rating }
      }
    )
    

    更新されたドキュメントの数を返します。1の場合は問題ありません。0の場合は新しいレコードをプッシュする必要があります。

    db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
        {$push: { votes: { "ip":ip , "rating":rating  }}
    })
    

    位置演算子とupsertingのjiraチケットもあります。mongodbでこの機能が必要な場合は、plzがこの問題に投票します。以下は問題のリンクです

    https://jira.mongodb.org/browse/SERVER-3326

    編集 :jiraチケットは Wo n't Doでクローズされました 2019年6月)



    1. MongoDB:ポリゴンに$geoIntersectを使用した不正な形式のgeoクエリ

    2. MongoDBにドキュメントを挿入する5つの方法

    3. Redisオートコンプリート

    4. ImportError:redisという名前のモジュールがありません