如何从对象数组中投影所有嵌套文档?
Posted
技术标签:
【中文标题】如何从对象数组中投影所有嵌套文档?【英文标题】: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
);
【问题讨论】:
【参考方案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
【讨论】:
对我不起作用。最后,我更改了数据库架构并进行了新查询以上是关于如何从对象数组中投影所有嵌套文档?的主要内容,如果未能解决你的问题,请参考以下文章