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

mongodbのフィールドの自動計算

    MongoDBは、1つのクエリで要求しているものを作成することはできませんが、2段階のクエリで作成することはできます。

    まず、新しい値を配列にプッシュします:

    db.Test3.findOneAndUpdate(
    {_id: ObjectId("58047d0cd63cf401292fe0ad")},
    {$push: {"items":  {"date": ISODate("2013-01-27T16:38:16.163+0000")}}},
    {returnNewDocument: true},
    function (err, result) {
    
    }
    );
    

    次に、最後にプッシュされた値よりも小さい場合にのみ、「lastDate」を更新します。

      db.Test3.findOneAndUpdate (
       {_id: ObjectId("58047d0cd63cf401292fe0ad"), "lastDate":{$lt: ISODate("2013-01-25T16:38:16.163+0000")}},
       {$set: {"lastDate": ISODate("2013-01-25T16:38:16.163+0000")}},
       {returnNewDocument: true},
       function (err, result) {
       }
      ); 
    

    競合状態を回避するには、2番目のパラメーター「lastDate」が必要です。このようにして、「lastDate」内に「プッシュされた最高の日付」が確実に存在することを確認できます。

    あなたが求めている2番目の問題に関連して、同様の戦略に従うことができます。 {"allAre": false}を更新します {"_id":yourID, "items.is":false)}の場合のみ 。基本的に「false」を設定するのは、の子の値が「false」の場合のみです。このプロパティを持つドキュメントが見つからない場合は、何も更新しないでください。

    // add a new Child to false
    db.Test4.findOneAndUpdate(
    {_id: ObjectId("5804813ed63cf401292fe0b0")},
    {$push: {"items":  {"is": false}}},
    {returnNewDocument: true},
     function (err, result) {
    
    }
    );
    
    // update allAre to false if some child is false
    db.Test4.findOneAndUpdate (
       {_id: ObjectId("5804813ed63cf401292fe0b0"), "items.is": false},
       {$set: {"allAre": false}},
       {returnNewDocument: true},
       function (err, result) {
       }
      ); 
    



    1. MongooseでMongodbデータベースのクローンを作成する方法

    2. GolangGraphQLMongoDBデータベースから日付とIDを取得するのに苦労しています

    3. Rails:引数の数が間違っています(2が与えられ、1が期待されます)MongoID

    4. フォームスキーマと関数をデータベースに保存する