簡體   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