Necesito construir una operación de actualización como esta:
db.collection.update({ "referencedGeneralPractitioner.id": "id1" }, { $set: { "referencedGeneralPractitioner.$[elem]": { "resourceType": "practitioner", "id": "id1", "field": "modified" } } }, { "multi": true, "arrayFilters": [ { "elem.id": { $eq: "id1" } } ] })Intenté construirlo usando spring data mongodb:
Query query = new Query(); Update update = new Update(); this.mongoTemplate.updateMulti( query.addCriteria(Criteria.where("referencedGeneralPractitioner.id").is(practitionerReference.getId())), update .set("referencedGeneralPractitioner.$[elem]", practitionerReference) .filterArray(Criteria.where("elem.id").is(practitionerReference.getId())) , Patient.class );Sin embargo, como puede ver en el registro, realiza la siguiente actualización:
Actualización de llamada usando consulta:
{ "referencedGeneralPractitioner._id":"ae3e9046-5f78-434e-bf39-e6477a8183a9" }y, actualizar:
{ "$set":{ "referencedGeneralPractitioner.$[elem]":{ "_id":"ae3e9046-5f78-434e-bf39-e6477a8183a9", "resourceType":"practitioner", "field": "modified" } } } Como puede ver, el bloque arrayFilters no está presente.
¿Algunas ideas?
Debería ser
.filterArray(Criteria.where("elem").is(practitionerReference.getId()))