Как увеличить поля объекта документа MongoDB внутри массива

это формат моего документа:

{
    _id: some id,
    name: 'some name',
    versions: []
}

на versions поле I хранит такие объекты, как {v: '2.5', count: 5} здесь count содержит количество раз, когда используется версия.

какой самый простой способ сделать следующее?

  1. вставьте новый объект внутри versions массив, если он не существует
  2. Ff определенная версия существует внутри versions массив затем увеличить его count

1 ответов


простой путь должен быть,

db.collection.update({versions.v:'some_version'},{"$inc":{"versions.$.count":1}});

Это увеличит ваш счет, если версия существует, но, как говорит документация MongoDB,$ оператор не может быть смешан с upsert, поэтому выше запрос не приведет к insert if {versions.v:'some_version'} не удается.

позиционный оператор не может быть объединен с upsert, так как он требуется соответствующий элемент массива. Если ваше обновление приводит к вставке тогда " $ " будет буквально использоваться в качестве поля имя.

Ниже приведены билеты на JIRA для поддержки upsert с $. Вы можете проголосовать и посмотреть этот выпуск.

Upsert с $ - позиционным оператором может создавать плохие документы

поддержка $ позиционного оператора с upsert