检查键存在于嵌套的子文档中

时间:2016-06-17 00:19:50

标签: mongodb mongodb-java

我使用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 的前两种方法是直观的但是失败了。只有第三个有效,但它很尴尬。我的真实数据还有一个子文档要进入。

我必须编写一个实用程序函数来执行此检查,但我认为它不应该是这样丑陋。

1 个答案:

答案 0 :(得分:1)

Document基本上是Map,并且不支持像testKey这样的虚线语法,因此您必须像现在一样手动将其向下移动。