我使用MongoDB Java驱动程序3.2并尝试检查嵌套子文档中是否存在字段。我必须采取一些非常尴尬的方法。例如:
ObjectId oid = new ObjectId();
Document newDoc = new Document("_id", oid);
newDoc.append("c_doc", new Document("cid", "child document").append("co", "obj"));
String testKey = "c_doc.cid";
if (newDoc.containsKey(testKey)) {
System.out.println("exist");
} else {
System.out.println("not exist");
}
if (newDoc.get(testKey) != null) {
System.out.println("get exist");
} else {
System.out.println("get null");
}
if (((Document)newDoc.get("c_doc")).containsKey("cid")){
System.out.println("get and check: exist");
} else {
System.out.println("get and check: not exist");
}
检查 c_doc 的子文档中是否存在密钥 cid 的前两种方法是直观的但是失败了。只有第三个有效,但它很尴尬。我的真实数据还有一个子文档要进入。
我必须编写一个实用程序函数来执行此检查,但我认为它不应该是这样丑陋。
答案 0 :(得分:1)
Document
基本上是Map
,并且不支持像testKey
这样的虚线语法,因此您必须像现在一样手动将其向下移动。