我有一个如下的集合:
{
_id: ...,
userId: test,
cards: [
{ cardId: 166, qty: 2 },
...
]
}
我可以将以下查询发送到mongo以更新特定的卡:
db.getCollection('collections').update(
{ 'userId': 'test', 'cards.cardId': 166},
{ $set: {"cards.$.qty": 3} }
)
我还希望能够创建卡,如果它不存在(即没有带有此ID的卡),但文档说:
不要将位置运算符$与upsert运算一起使用,因为 insert将在插入的文档中使用$作为字段名称。
这有什么办法吗?我可以使用对数据库的单个请求进行更新 - 如果存在/创建吗?
答案 0 :(得分:1)
试试这种方式
db.getCollection('collections').update(
{ 'userId': 'test', 'cards.$.cardId': 166},
{ $set: {"cards.$.qty": 3} }
)
或
db.getCollection('collections').update(
{ 'userId': 'test', 'cards.0.cardId': 166},
{ $set: {"cards.0.qty": 3} }
)