2

MongoDb のクエリ セレクターと更新セレクターのジャングルに少し絡み合っています。

状況: 会社のコレクションがあります。このように

Companies.find({}) =>
 {_id: 1, item_amount: 5}, 
 {_id: 2, item_amount: 7}, 
 {_id: 3, item_amount: 10}

そして、いくつかの構造を持つ Users コレクションがあります。ユーザーがアイテムを購入したい場合、会社の価値が減少し、ユーザーの価値が増加する可能性があります。1 つの条件は、ユーザーがアイテムを購入した場所を知っていることです。

{userId: _id,
 ownedItems: 
  [{company_id: 2, item_amount: 3},
  {company_id: 1, item_amount: 5}]
}

Ok。ユーザーがたとえば 5 つのアイテムを購入したい場合、Users.update() を使用するにはどう{_id: 3}すればよいですか (ユーザーが のフィールドを持っているかどうかはわかりませんcompany_id: 3) 。

私はそれが次のようなものかもしれないと思った:

Companies.update({_id: 3}, {$inc: {item_amount: - 5}})
&&
Users.update({userId: _id}, {$set: {'ownedItems[x].company_id': 3}, $inc{'ownedItems[x].item_amount': 5})

しかし、当然いくつかの問題があります。各クリントを
どのように知ることができますか? [x]並べ替え?新しい会社を追加する必要がある場合はどうすればよいですか? フィールドが存在しない場合でも動作しますか
?$set'ownedItems[x].company_id'

IF/Elseステートメントでsmthをチェックするかもしれません。たとえば、$existまたは$cond(集約の場合) セレクターを使用します。しかし、 .find() は常にカーソルを返します (そうですか?)。true または false ではありません。では、何ができるでしょうか?集約セレクターはどのように使用できますか? このような:

Users.find({_id: userId}, {$cond: [{$eq: ['owenedItem[x].company_id', _someId_]}, {$set:{...}}, {$push: {...}}]})

それはうまくいきますか?

4

1 に答える 1