在MongoDB中的数组的相同元素中找到2个或更多条件

时间:2018-07-17 06:01:39

标签: mongodb mongodb-query

我有一个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”的句子。

2 个答案:

答案 0 :(得分:0)

$ elemMatch是这样:

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

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

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"
        }
    ]
}

答案 1 :(得分:0)

根据上述问题的描述,作为解决方案,请尝试执行以下MongoDB查询

    db.getCollection("test").find({
    items: {
        $elemMatch: {
            Token: 'face',
            "POS": "VERB"
        }
    }
}, {
    'items.$': 1
})