繁体   English   中英

MongoDB:从单个文档中查找所有匹配的数组元素

[英]MongoDB: Find all matched array element from single document

我有一个像这样的mongodb文件,

{
  "_id" : ObjectId("4e8ae86d08101908e1000001"),
  "eId": 101,
  "about": "test",
  "tags" : [
          {"name": "jana"}, 
          {"name":"bala"}, 
          {"name":"jk"}, 
          {"name":"charles"}
   ]
}

我需要找到所有匹配的数组元素,其中名称与给定数组匹配。

db.coll.find({"tags": {"$elemMatch": {"name": {"$in": [/^jana/i, /^charles/i] }}}})

对于此查询,我得到以下结果

{
    "_id" : ObjectId("4e8ae86d08101908e1000001"),
    "tags" : [ 
        {
            "name" : "jana"
        }
    ]
}

$ elemMatch查询只返回第一个匹配的元素,但是我想要所有匹配的数组元素,像这样,

{
    "_id" : ObjectId("4e8ae86d08101908e1000001"),
    "tags" : [ 
        {
            "name" : "jana"
        },
        {
            "name" : "charles"
        }
    ]
}

是否有可能得到这样的结果?

注意: 我不需要任何其他字段,我只需要匹配的数组元素以及_id

您可以使用MongoDB 聚合管道

db.coll.aggregate([
    {'$unwind': '$tags'},
    {'$match': 
        {"tags.name": 
            {"$in": [/^jana/, /^charles/i] }
        }
    },
    {'$group': 
        {
            '_id': '$_id',
            'tags': 
                {'$push': '$tags'}
        }
    }
])

结果:-

{
    "result" : [ 
        {
            "_id" : ObjectId("5538b214706a90c718f75a41"),
            "tags" : [ 
                {
                    "name" : "jana"
                }, 
                {
                    "name" : "charles"
                }
            ]
        }
    ],
    "ok" : 1
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM