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: {...}}]})
それはうまくいきますか?