gpt4 book ai didi

java - 更新mongodb java中的嵌套数组列表

转载 作者:可可西里 更新时间:2023-11-01 10:42:55 27 4
gpt4 key购买 nike

大家好,我有一个像这样的集合 ` "_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。如果名称匹配,我正在尝试更新 nameIdentityList 中的 sourceId 列表。我的java代码是:

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.sourceId 的 nameIdentity)遍历元素({nameIdentity。

如果我的条件得到满足,我会这样期待:

`"_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"
}
]
},

],`

.有什么建议我哪里错了吗?我的 nameIdentity 中有多个名称,即使匹配的文档是 second 或 third ,sourceId 总是被附加到第一个文档。我如何更新到特定的匹配文档。

最佳答案

您错过了 positional $ $push 中“nameIdentity”字段后的运算符:

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))
);

$push 操作像其他更新操作修饰符一样需要知道要处理的匹配数组元素的“索引”。否则会出现您报告的错误。

关于java - 更新mongodb java中的嵌套数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32178146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com