Как увеличить поля объекта документа MongoDB внутри массива
это формат моего документа:
{
_id: some id,
name: 'some name',
versions: []
}
на versions
поле I хранит такие объекты, как {v: '2.5', count: 5}
здесь count
содержит количество раз, когда используется версия.
какой самый простой способ сделать следующее?
- вставьте новый объект внутри
versions
массив, если он не существует - 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 с $ - позиционным оператором может создавать плохие документы