Java 通过对象匹配查询MongoDB中的文档

Java 通过对象匹配查询MongoDB中的文档,java,mongodb,Java,Mongodb,如何找到包含给定JSON对象的文档 例如: 假设在数据库test中有这样一个文档: { "identification": { "componentId": "3a4f6199-6141-4179-ac5f-f1bbcf627bb2", "componentType": "PivotTable", "dataDate": "2016-06-15T15:29:51.139+0200", "dataType": "PTF", "properties": {

如何找到包含给定JSON对象的文档

例如:

假设在数据库
test
中有这样一个文档:

{
  "identification": {
    "componentId": "3a4f6199-6141-4179-ac5f-f1bbcf627bb2",
    "componentType": "PivotTable",
    "dataDate": "2016-06-15T15:29:51.139+0200",
    "dataType": "PTF",
    "properties": {
      "contextId": "0329fe70-92f0-4b60-b3c2-79377adb8f95",
      "tags": ["tag1", "tag2"]
    }
  },
  "viewData": {
    "lineGroups": []
  }
}
现在仅给出文档的
标识
部分,部分键设置为值:

{
    "componentType": "PivotTable",
    "properties": {
      "tags": ["tag1"]
    }
}
由于上述文件的标识部分与给定标识匹配,因此应返回该文件

如果我执行
db.test.find({identification:{/*给定的标识段*/}})
,mongodb将通过精确检查文档中的每个条目直接比较标识部分。在这种情况下,将不会返回该文档


mongodb查询语言中有没有一种方法可以让我以相对直接或简单的方式实现这一点?或者我必须递归地解析Identification对象中的条目才能构造查询

Mongo将尝试匹配整个属性子文档, 因此,在这种情况下,我们必须提供1:1的文件

您可以尝试使其工作的方法是展开每个元素并将其添加到查询筛选器部分

{
    "componentType": "PivotTable",
    "properties.tags": {$in:["tag1"]}    
}

Mongo将尝试匹配整个属性子文档, 因此,在这种情况下,我们必须提供1:1的文件

您可以尝试使其工作的方法是展开每个元素并将其添加到查询筛选器部分

{
    "componentType": "PivotTable",
    "properties.tags": {$in:["tag1"]}    
}

因此,以这种方式,我仍然需要通过解析子文档中的条目来构造查询字符串。没有更简单的方法了?因为当子文档结构变得复杂(包含另一个具有不同类型值的子文档)时,构造查询就变得不那么容易了。@qingl97如果我的答案帮助您接受它,请看:这样,我仍然需要通过解析子文档中的条目来构造查询字符串。没有更简单的方法了?因为当子文档结构变得复杂(包含另一个具有不同类型值的子文档)时,构造查询就变得不那么容易了。@qingl97如果我的回答有助于您接受它,请参见以下内容: