mongodb 查询:嵌套的 elemMatch

mongodb query: nested elemMatch

目前,这是我当前的文档:

{
    _id: 'd283015f-91e9-4404-9202-093c28d6a931',
    referencedGeneralPractitioner: [
      {
        resourceType: 'practitioner',
        cachedIdentifier: [
          {
            system: { value: 'urn:oid:1.3.6.1.4.1.19126.3' },
            value: { value: '14277399B' }
          }
        ]
      }
    ]
  }

这里有两个嵌套对象数组:referencedGeneralPractitioner[{cachedIdentifier[{}]}].

目前,我正在使用此查询获取结果:

{
   "referencedGeneralPractitioner":{
      "$elemMatch":{
         "cachedIdentifier.value.value":"14277399B",
         "cachedIdentifier.system.value":"urn:oid:1.3.6.1.4.1.19126.3"
      }
   }
}

它正在获取我想要的文档,但我不太清楚上面的查询是否是我真正想要的。

我的意思是,我只在 referencedGeneralPractitioner 字段数组上应用 $elemMatch

  1. 真的够了吗?
  2. 我应该在 cachedIdentifier 上添加一个嵌套的 $elemMatch 吗?

有什么想法吗?

看来你需要这样查询:

  db.collection.find({
     "referencedGeneralPractitioner.cachedIdentifier": {
         "$elemMatch": {
                        "value.value": "14277399B",
                        "system.value": "urn:oid:1.3.6.1.4.1.19126.3"
                       }
        }
    })

playground

这是为了防止您需要在嵌套数组中的任何元素的同一元素中找到具有 $and 两个值的完整文档,如果您需要提取特定元素,则需要 $filter

如果您还需要根据第一层数组中的元素进行搜索,则需要修改如下:

 { 
   "referencedGeneralPractitioner": {
     "$elemMatch": { 
       resourceType: 'practitioner',
        "cachedIdentifier": {
                "$elemMatch": {
                               "value.value": 1,
                               "system.value":2
                              }
                            }
                   }
           }
   }

这将为您提供所有完整的文件,同时有 resouceType:"practitioner" and { value.value:3 and system.value: 2 }

同样重要的是要强调这不会正常工作!:

       {
     "referencedGeneralPractitioner":{
        "$elemMatch":{
     "cachedIdentifier.value.value":"14277399B",
    "cachedIdentifier.system.value":"urn:oid:1.3.6.1.4.1.19126.3"
     }
   }
 }

因为它将根据嵌套元素中的任何单个值匹配误报,例如: wrong playground