gpt4 book ai didi

java - MongoDB Java 嵌套文档无法使用键名称中的点进行访问

转载 作者:行者123 更新时间:2023-12-02 08:44:58 25 4
gpt4 key购买 nike

在 Java 中使用 MongoDB API 时,我尝试在文档中检索 two 的值,如下所示:

data-id: "1234"
one:
two: "three"

我正在运行这个:

MongoCollection<Document> documents = ...;
Document document = documents.find(Filters.eq("data-id", "1234")).first(); // Not null
document.get("one"); // Not null
document.get("one.two"); // This is null
((Document) document.get("one")).get("two"); // Not null

花了一些时间阅读文档和其他 Stack Overflow 问题后,我了解到在键名称中使用点(例如键的 one.two )应该可以,但它不适合我.

最佳答案

After spending some time reading documentation and other Stack Overflow questions, I learned that using dots in the key name (like one.two for the key) should work, but it isn't for me.

find 方法的查询过滤器中使用点符号时效果很好。例如,

Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document

或其 mongo shell 等效项:

db.collection.find( { "one.two": "three" } )


Document类的 get() 方法采用一个 Object(字符串键)作为参数并返回一个 Object

考虑代码:

Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);

输出 Document{{_id=1.0, data-id=1234, one=Document{{two= Three}}}} 显示有三个键: _iddata-idone。请注意,没有名为 one.two 的键。键two 位于具有键one 的文档的子文档内。

所以,从你的代码来看:

document.get("one.two");    // This is null ((Document)
document.get("one")).get("two"); // Not null

第一个语句返回 null,下一个语句返回 two(字符串值)。两者都是正确结果,这是Document类 API 的行为。

您应该使用方法getEmbedded来访问嵌入字段one.two。因此,将 document.get("one.two") 替换为

document.getEmbedded(Arrays.asList("one", "two"), String.class)

结果是“三”,正如预期的那样。

关于java - MongoDB Java 嵌套文档无法使用键名称中的点进行访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61144095/

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