mongodb数组查询 - MongoDB 查询时,如何过滤子文档?

查看:439
本文介绍了mongodb数组查询 - MongoDB 查询时,如何过滤子文档?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

有一个文档,里面包含一个子文档,大体如下:

{
    "_id" : ObjectId("59376b35a233be856d4a0731"),
    "plate_number" : "京A11111",
    "breakdown" : [
        {
            "file_id" : "4003732",
            "case_number" : "xxxx",
            "lev_code" : "B231",
            "crdate" : ISODate("2016-01-19T17:00:43Z")
        },
        {
            "file_id" : "4010523",
            "case_number" : "xxxx",
            "lev_code" : "B231",
            "crdate" : ISODate("2016-06-29T14:53:36Z")
        },
        {
            "file_id" : "4010980",
            "case_number" : "xxxx",
            "lev_code" : "B211",
            "crdate" : ISODate("2016-07-01T17:18:40Z")
        }
    ]
}

现在的需求是,如何使用PHP 7根据plate_number & lev_code查询匹配的个数

还有个问题是,如何能匹配符合条件的子文档?

# mongo
find({plate_number:"京A11111", breakdown.lev_code:"B231"})
{
    "breakdown" : [
        {
            "file_id" : "4003732",
            "case_number" : "xxxx",
            "lev_code" : "B231",
            "crdate" : ISODate("2016-01-19T17:00:43Z")
        },
        {
            "file_id" : "4010523",
            "case_number" : "xxxx",
            "lev_code" : "B231",
            "crdate" : ISODate("2016-06-29T14:53:36Z")
        },
        {
            "file_id" : "4010980",
            "case_number" : "xxxx",
            "lev_code" : "B211",
            "crdate" : ISODate("2016-07-01T17:18:40Z")
        }
    ]
}

解决方案

建议使用MongoDB的aggreation的$filter:

https://docs.mongodb.com/mast...

Love MongoDB!Have fun!

这篇关于mongodb数组查询 - MongoDB 查询时,如何过滤子文档?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆