我在 MongoDb 的查询和更新选择器的丛林中纠结了一下。
情况:我们有公司收藏。像这样
Companies.find({}) =>
{_id: 1, item_amount: 5},
{_id: 2, item_amount: 7},
{_id: 3, item_amount: 10}
我们有一些结构的用户集合。用户想要购买任何物品,它可能会降低公司的价值并增加用户的价值,有一个条件 - 用户可能知道他在哪里购买了该物品。
{userId: _id,
ownedItems:
[{company_id: 2, item_amount: 3},
{company_id: 1, item_amount: 5}]
}
好的。如果用户想购买例如 5 件商品{_id: 3}
(我们不知道用户是否有字段),我将如何使用 Users.update( 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]
每个 clint 的值?解决?如果我需要添加新公司怎么办?如果字段不存在会起作用
吗?$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: {...}}]})
它会起作用吗?