tengo un documento en mongodb con 2 nivel profundo matriz anidada de los objetos que tengo que actualizar, algo como esto:Actualización en mongodb
{
id: 1,
items: [
{
id: 2,
blocks: [
{
id: 3
txt: 'hello'
}
]
}
]
}
Si sólo había un arsenal nivel profundo que podría utilizar operador posicional para actualizar objetos en ella, pero en el segundo nivel, la única opción que he ocurrió es utilizar el operador posicional con el índice del objeto anidado, como esto:
db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
este enfoque funciona pero parece peligroso para mí ya que Estoy construyendo un servicio web y un número de índice debería venir de clie nt que puede enviar decir 100000 como índice y esto obligará a mongodb a crear una matriz con 100000 índices con valor nulo.
¿Hay alguna otra forma de actualizar dichos objetos anidados donde pueda consultar el ID del objeto en lugar de su posición o formas de verificar si el índice suministrado está fuera de límites antes de usarlo en la consulta?
Le sugiero que vuelva a visitar este esquema y encuentre un diseño diferente para que pueda aprovechar la potencia que proporciona MongoDB. No va a haber una manera fácil/súper eficiente de actualizar un elemento específico en la matriz AFAIK. ¿Puede rediseñar esto para que pueda aprovechar adavantage de 'addToSet',' pop' y de los otros operadores de matriz? – brianz
Gracias por su sugerencia, sí puedo y, de hecho, ya lo hice. Al hacer esta pregunta solo quería asegurarme de que no me faltaba nada. – Anton
También estoy enfrentando el mismo problema. ¿Puede publicar su muestra de esquema rediseñado? – Damodaran