2017-02-25 8 views
0

JSONオブジェクト:モンゴDB findAndModifyクエリ

{ 
    "_id" : ObjectId("123"), 
    "pi" : [ 
     { 
      "si" : 0, 
      "ui" : { 
       "_id" : ObjectId("xyz"), 
       "un" : "xyz", 
       "his" : 27, 
      } 
     }, 
     { 
      "si" : 1, 
      "ui" : { 
       "_id" : ObjectId("zyx"), 
       "un" : "zyx", 
       "his" : 18, 
      } 
     } 
    ], 
} 

操作:

db.getCollection('playing_table').findAndModify(
    {"_id" : ObjectId("123") ,"pi.ui._id":ObjectId("xyz")}, 
    {}, 
    {$inc : {'pi.$.ui.his' : 1}}, 
    {new : true}, 
    function (err, updata) {}); 

私はfindAndModify()クエリを使用してカウンターを増やすことをお勧めします。

可能ですか?

答えて

1

すべてui._id年代が一意であると仮定すると、これはあなたのために動作します:

{ 
    "_id" : ObjectId("123"), 
    "pi" : [ 
     { 
      "si" : 0, 
      "ui" : { 
       "_id" : ObjectId("xyz"), 
       "un" : "xyz", 
       "his" : 28, // incremented 
      } 
     }, 
     { 
      "si" : 1, 
      "ui" : { 
       "_id" : ObjectId("zyx"), 
       "un" : "zyx", 
       "his" : 18, 
      } 
     } 
    ], 
} 

は、例えばのように、あなたのObjectId Sを調整してください:

db.getCollection('playing_table').findAndModify({ 
    query: { 
     "pi": { $elemMatch: { "ui._id" : ObjectId("xyz") } } 
    }, 
    sort: {}, 
    update: { $inc: { "pi.$.ui.his" : 1 } } 
}) 

それはになります。 ObjectId("5883ee408d4f6e2b748bf57b")

+0

完了...ありがとうございました。 –

+0

快感は私のものです。 – wscourge