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

Mongodbupsert埋め込みドキュメント

    必要なのは$addToSetコマンドだと思います。これは、要素がまだ存在しない場合にのみ、要素を配列にプッシュします。簡潔にするために、例を少し簡略化しました:

    db.meters.findOne()
    {
        "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
        "config" : {
            "someparam" : 4.5
        },
        "data" : [
            {
                "Meter" : 123456789,
            }
        ],
        "key" : "20120418_123456789"
    }
    

    今すぐ実行:

    db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})
    

    そして、更新されたバージョンを取得します:

    db.meters.findOne()
    {
        "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
        "config" : {
            "someparam" : 4.5
        },
        "data" : [
            {
                "Meter" : 123456789,
            },
            {
                "Meter" : 1234
            }
        ],
        "key" : "20120418_123456789"
    }
    

    同じコマンドを再度実行しても、結果は変わりません。

    注:特にこのフィールドに制限がなく、この方法で更新することで頻繁に(比較的高価な)移動を引き起こす場合は、これらのドキュメントを増やす可能性があります。これを軽減する方法については、こちらをご覧ください。

    http://www.mongodb.org/display/DOCS/Padding + Factor#PaddingFactor-ManualPadding




    1. AmazonAWSでの安全なMongoDBデプロイメント

    2. mongodb c#特定のフィールドドット表記を選択

    3. MongoDBコレクションからSwingJTableにデータを取得します

    4. MongoDB書き込みの懸念:3つの知っておくべき警告