gpt4 book ai didi

java - 在 mongodb 数组元素中设置值

转载 作者:行者123 更新时间:2023-12-01 11:51:25 25 4
gpt4 key购买 nike

我有一个这样的文档:

{
"_id" : "1",
"messages" : [
{
"_id" : "second",
"conversationId" : "1",
"timestamp" : ISODate("2015-03-01T20:16:30.991Z"),
"text" : "cool text",
"operatorId" : "operatorId",
"clientId" : "clientId",
"fromClient" : true
}
]
}

我必须将文本值更改为“最酷的文本”。我使用 Spring 的 MongoTemplate 和 Criteria api 并编写了下面的代码

mongoOps.upsert(
query(where("_id").is(message.getConversationId()))
.addCriteria(where("messages.$._id").is(message.getId())),
new Update().set("text", message.getText()), ConversationDocument.class);

但什么都没有改变。

mongoOps.findOne(query(where("_id").is(message.getConversationId())), ConversationDocument) 返回与我要更改的文档完全相同的文档。

我做错了什么?

最佳答案

我认为你应该使用:

查询中的

messages._id 而不是 messages.$._id

messages.$.text 而不是更新方法中的 text

尝试一下(我已经测试过,它有效)。

Query query = query(
new Criteria().andOperator(
where("_id").is(conversation.getId()),
where("messages._id").is(message.getId())
)
);

mongoOps.upsert(query, new Update().set("messages.$.text", "coolest text"), Conversation.class);

关于java - 在 mongodb 数组元素中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798873/

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