如何获取具有某个字段的特定值的所有子文档?

时间:2016-03-09 13:23:17

标签: mongodb

我有以下简化集合:(考虑引用所有street_names

{
    city_id: 1,
    city_name: "city1",
    streets: [
                {
                 street_id: 1,
                 street_name: street1 
                },
                {
                 street_id: 2,
                 street_name: street2 
                },
                {
                 street_id: 3,
                 street_name: street3 
                },
                {
                 street_id: 4,
                 street_name: street4
                },
                {
                 street_id: 5,
                 street_name: street5
                }
            ]
},
{
    city_id: 2,
    city_name: "city2",
    streets: [
                {
                 street_id: 1,
                 street_name: street1 
                },
                {
                 street_id: 2,
                 street_name: street2 
                },
                {
                 street_id: 3,
                 street_name: street3 
                },
                {
                 street_id: 4,
                 street_name: street4
                },
                {
                 street_id: 5,
                 street_name: street5
                },
                {
                 street_id: 6,
                 street_name: street6
                },
                {
                 street_id: 7,
                 street_name: street7
                }

            ]
}

有没有办法以只返回与某个名称regexp匹配的子文档的方式查询集合? 例如: 获取street_name包含“”(3个空格)的所有子文档。

1 个答案:

答案 0 :(得分:1)

使用聚合框架时的过程如下所示:

  1. $匹配文档 - 这个步骤可以省略,因为我们需要在展开后再次执行匹配 - 但限制工作集是一个好主意
  2.   

    {$ match:{“streets.street_name”:“/ REGEX_EXPRESSION_HERE /”}}

    1. 从数组中取出数据
    2.   

      {$放松: “$街道”}

      1. $ match documents
      2.   

        {$ match:{“streets.street_name”:“/ REGEX_EXPRESSION_HERE /”}}

        1. 仅显示所需内容
        2.   

          {$ project:{_ id:0,“street_id”:“$ streets.street_id”,street_name“:”$ streets.street_name“,city_id:1}}

          - 编辑前

          您可以在regex

          中使用filter expression
          db.collection.find({"streets.street_name":"/REGEX_EXPRESSION_HERE/"})