首页 > 解决方案 > 在 MongoDB 中的数组的相同元素中查找 2 个或多个条件

问题描述

我有一个json数据结构如下:

 "_id" : {
           Inst_Id: 1119689706
          },
 "items" : [
     {
        "Token" : "Let", 
        "Lemma" : "let", 
        "POS" : "VERB"
     },
     {
        "Token" : "'s", 
        "Lemma" : "-PRON-", 
        "POS" : "PRON" 
     },       
        {
         "Token" : "face", 
          "Lemma" : "face", 
          "POS" : "VERB"
         },
         {
          "Token" : "it", 
          "Lemma" : "-PRON-", 
          "POS" : "PRON", 
         }
          ]

我的项目基本上是具有句子标记数组的字段(例如“让我们在里面面对它。)如何在数组的同一个项目中搜索 2 个或多个条件?我试过 $elemMatch 但它只匹配数组中的元素而不是在一个数组内。例如,我想查找一个句子,其标记为“face”且 POS 同时为“VERB”。

标签: mongodbmongodb-query

解决方案


$elemMatch 是这样的:

db['01'].find(
    {items:{$elemMatch:{Token:"face",POS:"VERB"}}}        
)

将返回整个文档。要仅返回匹配的数组元素,请将其添加到 query 的投影部分:

db['01'].find(
    {items:{$elemMatch:{Token:"face",POS:"VERB"}}}, 
    {items:{$elemMatch:{Token:"face",POS:"VERB"}}}
)

将返回

    { 
    "_id" : {
        "Inst_Id" : 1119689706.0
    }, 
    "items" : [
        {
            "Token" : "face", 
            "Lemma" : "face", 
            "POS" : "VERB"
        }
    ]
}

推荐阅读