У меня есть документ в mongodb с 2-уровневым вложенным массивом объектов, который мне нужно обновить, примерно так:
{
id: 1,
items: [
{
id: 2,
blocks: [
{
id: 3
txt: 'hello'
}
]
}
]
}
Если бы существовал только один уровень глубокого массива, я мог бы использовать позиционный оператор для обновления объектов в нем, но для второго уровня единственным вариантом, который я выбрал, является использование позиционного оператора с индексом вложенных объектов, например:
db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
Этот подход работает, но мне кажется опасным, поскольку я строю веб-службу, а индексный номер должен поступать от клиента, который может отправить 100000 в качестве индекса, и это заставит mongodb создать массив с 100000 индексами с нулевым значением.
Существуют ли какие-либо другие способы обновления таких вложенных объектов, где я могу ссылаться на идентификатор объекта вместо его положения или, возможно, на способы проверки того, был ли предоставленный индекс за пределами, прежде чем использовать его в запросе?