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

Mongodbは、サブアレイから特定の要素を更新します

    コードの問題はdot-notationです ドット表記を指定する場合、指定されたフィルター基準は、すべての基準を満たす単一の配列要素と一致する必要があると想定しているためです。しかし、そうではありません。配列のドット表記は、単一の基準が一致する場合、配列要素をピックアップする可能性があります。そのため、予期しない更新が行われています。

    $elemMatchを使用する必要があります array内のすべてのフィルターに一致させる エレメント。

    db.coll.update({
    '_id' : 28,
    n: { 
       $elemMatch:{
           a : new ObjectId('4ef85a3e46b3b84408000000'),
           c : 28 }
       }
    },
    {
      $push : {
         'n.$.p' : ObjectId("4b97e62bf1d8c7152c9ccb74")
      },
      $set : {
         'n.$.t' : ISODate("2013-05-13T14:22:46.777Z")
      }
    })
    

    出力は

    です
        {
            "a" : ObjectId("4ef85a3e46b3b84408000000"),
            "c" : 28,
            "p" : [
                ObjectId("4f00631046b3b85002000000"),
                ObjectId("4b97e62bf1d8c7152c9ccb74")
            ],
            "t" : ISODate("2013-05-13T14:22:46.777Z"),
            "u" : 26
        }
    



    1. 選択的なモンゴ回復を行う方法は?

    2. Mongodb例外、MongoCursorException'とメッセージ'$演算子がオブジェクトを大きくしすぎましたそれはどういう意味ですか?

    3. MongoDBが不明なキーでコレクションを検索

    4. 時間間隔内のMongo集約