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

Mongodbドットフィールドの更新

    もちろん、これはまさにあなたがそれをするように求めていることなので、そうします。タイトルにもかかわらず、"ドット表記"<は使用されません。 / a> ここに。もちろん、これは、既存のプロパティを上書きしない場合に実行したいことです。現在、 $set ここで構造を変更しない限り、基本的に冗長です。

    これを「修正」するには、dataを操作する必要があります 最初にオブジェクト。これらの線に沿って何かを:

    var newobj = {};
    Object.keys( data ).forEach(function(key) {
        if ( typeof(data[key]) == "object" ) {
           Object.keys( data[key] ).forEach(function(subkey) {
               newobj[key + "." + subkey] = data[key][subkey];
           });
        } else {
           newobj[key] = data[key];
        }
    });
    

    これにより、newobjに出力されます。 このような構造:

    {
        "postcode" : "BV123456789BY",
        "status.last_check" : 1413539153572,
        "status.code" : "06",
        "status.postnum" : "247431",
        "status.date" : ISODate("2014-10-17T11:28:20.540Z"),
        "status.text" : "06. Поступило в участок обработки почты (247431) Светлогорск - 1"
    }
    

    その後、もちろん、通常の更新を続行して、すべてを正しく行うことができます:

    Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
        if (err) console.log(err);
    });
    

    もちろん、よりネストされた構造には再帰が必要ですが、これで一般的な考え方が得られるはずです。ドット表記が最適ですが、実際に使用する必要があります。




    1. 配列からの一致条件と最新の日付

    2. mongodbのコレクションとは異なるものを見つける

    3. MongoDBに接続できませんerrno:61

    4. MongoDB単一ドキュメントのサイズ制限は16MBです