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

既知のフィールドセットを除くすべてのフィールドの設定を解除するにはどうすればよいですか?

    アトミック性を気にしない場合は、saveを使用して行うことができます :

    doc = db.myCollection.findOne({"_id": 123});
    for (k in doc.field_to_prune) {
      if (k === 'keep_field_1') continue;
      if (k === 'keep_field_2') continue;
      delete doc.field_to_prune[k];
    }
    db.myCollection.save(doc);
    

    このソリューションの主な問題は、アトミックではないことです。したがって、docへの更新 findOneの間 およびsave 失われます。

    別の方法は、実際にunsetすることです docを保存する代わりに、すべての不要なフィールド :

    doc = db.myCollection.findOne({"_id": 123});
    unset = {};
    for (k in doc.field_to_prune) {
      if (k === 'keep_field_1') continue;
      if (k === 'keep_field_2') continue;
      unset['field_to_prune.'+k] = 1;
    }
    db.myCollection.update({_id: doc._id}, {$unset: unset});
    

    mongoはupdateを実行するため、このソリューションははるかに優れています アトミックに、更新が失われることはありません。そして、あなたがやりたいことをするために別のコレクションは必要ありません。



    1. nodejs-mongodbミドルウェアの構文がmongoシェルと異なるのはなぜですか?

    2. useNewUrlParserをtrueに設定することにより、現在のURL文字列パーサーが非推奨の警告になるのを回避する

    3. Javaを使用したAzureでのMongoDBへの接続

    4. MongoのCursor.nextObjectが誤ってNullを返すことがありますか?