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

MongoDBの既存の値をインクリメントする方法

    MongoDb 3.6によると:

    db.collection.update(query, update, options)

    つまり、更新を使用して複数のドキュメントをアップサートできます。

    まず、値のみを含む配列をマップから作成する必要があります。

    const arrayOfValues = ['value_01', 'values_02'];
    

    次に、更新方法でアップサート+マルチオプションを使用する必要があります:

    db.foo.update({value: { $in: arrayOfValues}}, {$inc: {count:1}}, { upsert: true, multi: true });
    

    テスト出力:

    > db.createCollection("test");
    { "ok" : 1 }
    > db.test.insertMany([{value: "a"}, {value: "b"}, {value: "c"}];
    ... );
    2017-12-31T12:12:18.040+0200 E QUERY    [thread1] SyntaxError: missing ) after argument list @(shell):1:61
    > db.test.insertMany([{value: "a"}, {value: "b"}, {value: "c"}]);
    {
        "acknowledged" : true,
        "insertedIds" : [
            ObjectId("5a48b8061b98cc5ac252e435"),
            ObjectId("5a48b8061b98cc5ac252e436"),
            ObjectId("5a48b8061b98cc5ac252e437")
        ]
    }
    > db.test.find();
    { "_id" : ObjectId("5a48b8061b98cc5ac252e435"), "value" : "a" }
    { "_id" : ObjectId("5a48b8061b98cc5ac252e436"), "value" : "b" }
    { "_id" : ObjectId("5a48b8061b98cc5ac252e437"), "value" : "c" }
    > db.test.update({value: { $in: ["a", "b", "c"]}}, {$inc: {count:1}}, { upsert: true, multi: true });
    WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
    > db.test.find();
    { "_id" : ObjectId("5a48b8061b98cc5ac252e435"), "value" : "a", "count" : 1 }
    { "_id" : ObjectId("5a48b8061b98cc5ac252e436"), "value" : "b", "count" : 1 }
    { "_id" : ObjectId("5a48b8061b98cc5ac252e437"), "value" : "c", "count" : 1 }
    > db.test.update({value: { $in: ["a", "b", "c"]}}, {$inc: {count:1}}, { upsert: true, multi: true });
    WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
    > db.test.find();
    { "_id" : ObjectId("5a48b8061b98cc5ac252e435"), "value" : "a", "count" : 2 }
    { "_id" : ObjectId("5a48b8061b98cc5ac252e436"), "value" : "b", "count" : 2 }
    { "_id" : ObjectId("5a48b8061b98cc5ac252e437"), "value" : "c", "count" : 2 }
    > db.test.update({value: { $in: ["a", "b", "c"]}}, {$inc: {count:1}}, { upsert: true, multi: true });
    WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
    

    お役に立てば幸いです:)




    1. Ruby-有効期限が実装されたRedisベースのミューテックス

    2. Spark-エグゼキュータコンテキストごとに異なる変数を作成するにはどうすればよいですか?

    3. 集約パイプラインのコレクションからサブドキュメントを減算します

    4. mongodb認証を正しく取得する方法