使用upsert与子文档和位置运算符' $'

时间:2017-08-28 14:11:08

标签: mongodb

我有一个如下的集合:

{
    _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将在插入的文档中使用$作为字段名称。

这有什么办法吗?我可以使用对数据库的单个请求进行更新 - 如果存在/创建吗?

1 个答案:

答案 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} }
    )