【问题标题】:How to project all nested documents from an array of objects?如何从对象数组中投影所有嵌套文档?
【发布时间】:2021-04-16 06:43:43
【问题描述】:

我有这样的文件:

{
        "_id": "5ffc130e9fb31b26162e0bad",
        "results": [
            {
                "customer": {
                    "display_name": "Manno Dispensary - first",
                    "ext_acct_id": "267"
                }
            },
            {
                "customer": {
                    "display_name": "Manno Dispensary - second",
                    "ext_acct_id": "262"
                }
            },
            {
                "customer": {
                    "display_name": "Kako Dispensary - first",
                    "ext_acct_id": "261"
                }
            },
            {
                "customer": {
                    "display_name": "Kako Dispensary - second",
                    "ext_acct_id": "263"
                }
            }
        ]
}

我想编写一个 MongoDB 查询,它在 "customer.display_name" 上进行正则表达式搜索,并在满足此条件的结果中返回所有这些文档。

到目前为止,我已经编写了这个查询,它返回了我想要的输出,但问题是,它只是在结果中重新调整了一个文档,我错过了什么吗?

我想要的输出:

{
            "_id": "5ffc130e9fb31b26162e0bad",
            "results": [
                {
                    "customer": {
                        "display_name": "Manno Dispensary - first",
                        "ext_acct_id": "267"
                    }
                },
                {
                    "customer": {
                        "display_name": "Manno Dispensary - second",
                        "ext_acct_id": "262"
                    }
                }
            ]
    }

我实际上得到了什么:

{
                "_id": "5ffc130e9fb31b26162e0bad",
                "results": [
                    {
                        "customer": {
                            "display_name": "Manno Dispensary - first",
                            "ext_acct_id": "267"
                        }
                    }
                ]
        }

这是我为获取客户名称中包含“Manno”的所有客户而编写的查询。

我的收藏名称是 Order(mongoose), search="Manno"

Order.find({
      results: {
        $elemMatch : {
          "customer.display_name": {$regex: search}
        }
      }
    },{
      results: {
        $elemMatch : {
          "customer.display_name": {$regex: search}
        }
      } 
    });

【问题讨论】:

    标签: regex mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    $elemMatch 和 $ 将只返回单个匹配的文档/对象表单数组,试试 $filter 和 $regexMatch,

    • $filter 迭代结果数组的循环
    • $regexMatch检查正则表达式条件,返回true或false
    Order.find({
      results: {
        $elemMatch: {
          "customer.display_name": { $regex: "Manno" }
        }
      }
    },
    {
      results: {
        $filter: {
          input: "$results",
          cond: {
            $regexMatch: {
              input: "$$this.customer.display_name",
              regex: "Manno"
            }
          }
        }
      }
    })
    

    Playground

    【讨论】:

    • 对我不起作用。最后,我更改了数据库架构并进行了新查询
    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 2021-01-28
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2017-10-28
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多