2016-11-12 8 views
1

こんにちは皆私は以下の文書を持っています。ネストされた配列を更新する位置演算子

{ 
    "_id" : ObjectId("568d5db6809af7688306901a"), 
    "name" : "name", 
    "market" : "market", 
    "state" : "state", 
    "products" : [ 
     { 
      "updated" : ISODate("2016-11-11T23:07:11.114Z"), 
      "quantity" : 9, 
      "product" : "Prouct1", 
      "_id" : ObjectId("58264bd882547072b855547f") 
     }, 
     { 
      "updated" : ISODate("2016-11-11T23:02:26.174Z"), 
      "quantity" : 10, 
      "product" : "Prouct2", 
      "_id" : ObjectId("58264bd882547072b855546c") 
     }, 
     { 
      "updated" : ISODate("2016-11-11T23:02:26.174Z"), 
      "quantity" : 10, 
      "product" : "Prouct3", 
      "_id" : ObjectId("58264bd882547072b855548a") 
     }, 
     { 
      "updated" : ISODate("2016-11-11T23:02:26.174Z"), 
      "quantity" : 10, 
      "product" : "Prouct4", 
      "_id" : ObjectId("58264bd882547072b855576a") 
     }, 
     { 
      "updated" : ISODate("2016-11-11T22:58:14.083Z"), 
      "quantity" : 10, 
      "product" : "Prouct5", 
      "_id" : ObjectId("58264bd882547072b855547f") 
     }, 
     { 
      "updated" : ISODate("2016-11-11T23:07:11.109Z"), 
      "quantity" : -1, 
      "product" : "Prouct5", 
      "_id" : ObjectId("58264f1fa534b62abc89edf8") 
     }, 
     { 
      "updated" : ISODate("2016-11-11T23:07:11.119Z"), 
      "quantity" : -1, 
      "product" : "Prouct7", 
      "_id" : ObjectId("58264f1fa534b62abc89edfa") 
     } 
    ] 
} 

以下は私のクエリです。

query = {'products.product': {$in: ['Prouct1', 'Prouct2', 'Prouct3']}}; 

ただし、次のアップデートではProuct1のみがアップデートされます。 Prouct1、Prouct2、およびProuct3を更新するために更新をどのように変更できますか?

update = {$inc: {'products.$.quantity': -1},'products.$.updated': now}; 

ご協力いただきありがとうございます。

答えて

2

単純な検索クエリを使用してこれらを行うことはできません。配列

に あなたはdocumnetsを更新し、あなたの配列、 $match documnetを $unwindする集約フレームワークを使用することができます

{$inc: {'products.0.quantity': -1,'products.1.quantity': -1,'products.2.quantity': -1}} 

それとも 回避策と再び$pushそれを

関連する問題