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