Привет всем У меня есть коллекция, как этот ` "_id": ObjectId ("55dabba974cd60712be24443"),Обновление списка вложенных массив в MongoDB Java
"entityType" : "1",
"entityCreatedDate" : "08/24/2015 12:07:20 PM",
"nameIdentity" : [
{
"givenNameOne" : "JOY",
"givenNameThree" : "BRAKEL",
"lastName" : "BRAKEL",
"createdDate" : "08/24/2015 12:07:20 PM",
"sourceId" : [
{
"sourceId" : "55dabba974cd60712be24441"
}
]
},
],
Here name identity is a list as well as sourceId. I am trying to update sourceId list in nameIdentityList if it matches the names. My java code is :
Document sourceDocument=new Document("sourceId",sourceId);
mongoDatabase.getCollection("entity").updateOne(new Document("entityId", entityId).append("nameIdentity.givenNameOne","JOY"),
new Document("$push", new Document("nameIdentity.sourceId", sourceDocument)));
` Но я получаю исключение, например java.lang.RuntimeException: com.mongodb.MongoWriteException: не может использовать часть (nameIdentity of nameIdentity.sourceId) для перемещения элемента ({nameIdentity.
Если мое условие n выполняется следующим образом:
`"_id" : ObjectId("55dabba974cd60712be24443"),
"entityType" : "1",
"entityCreatedDate" : "08/24/2015 12:07:20 PM",
"nameIdentity" : [
{
"givenNameOne" : "JOY",
"givenNameThree" : "BRAKEL",
"lastName" : "BRAKEL",
"createdDate" : "08/24/2015 12:07:20 PM",
"sourceId" : [
{
"sourceId" : "55dabba974cd60712be24441"
},
{
"sourceId" : "55dabba974cd60712be24435"
}
]
},
],`
. любые предложения, в которых я ошибаюсь? У меня есть несколько имен в моем имени. Даже если совпадающий документ второй или третий, sourceId всегда привязывается к первому документу. Как мне обновить конкретный согласованный документ.
У меня есть несколько имен в моем имени. Даже если совпадающий документ второй или третий, sourceId всегда прикрепляется к первому документу. Как я могу обновить согласованный документ. –
@ShaikMujahidAli Позиционный оператор '$' (как также поясняется на странице руководства вручную) не возвращает согласованный индекс ничего, кроме «первого» события соответствия, которое всегда означает «внешний» массив. В этом случае вам нужен только «внешний индекс», так что это нормально. Это будет добавлено к соответствующему индексу любых условий запроса для этого массива. В вашем случае, независимо от названия. Но если бы у вас была «РАДОСТЬ» более одного раза, то только первая была сопоставлена. Однако заданный вами вопрос не использовал позиционный оператор '$' вообще. –