【发布时间】:2021-04-29 05:23:12
【问题描述】:
我有一个结构如下的猫鼬模式:
Schema E = {
_id,
... some fields,
details: [
{
...somefields,
people: [ObjectIds]
}
]
}
首先,我有一个聚合查询,我使用的是 $geoNear,然后是 $match,然后是 $facet。 操作后我得到的文件如下:
estates: [
{
_id,
... some fields,
details: [
{
...somefields,
people: [ObjectIds]
}
],
... other fields
},
... more estate objects
]
],
page: [...some objects]
我有一个名为 approved 的数组,其中包含一些对象 ID。
我想过滤 events.details 中的 page 数组,同时保持其余字段不变。
我想要的结果如下:
注意:*字段 filteredPeople 是我在过滤 people 和 approved 后想要的数组。 p>
estate: [
{
_id,
... some fields,
details: [
{
...somefields,
filteredPeople: [ObjectIds],
numberOfPeople: Size of people array
}
],
... other fields
},
... more estate objectes
],
page: [...some objects]
这是我尝试做的:
{
"estates": {
"$map": {
"input": "$estates",
"as": "estate",
"in": {
"details": {
"$map": {
"input": "$$estate.details",
"as": "detail",
"in": {
"filteredPeople": {
"$filter": {
"input": "$$detail.people",
"as": "people",
"cond": { "$in": ["$$people", approved] }
}
}
}
}
}
}
}
},
}
但这会删除其他字段。另一种方法是创建一个名为 EstatePeople 的单独字段,其中将存储 $addFields 的结果。
然后我可以尝试合并这两个数组。但是我没有任何字段可以匹配它们,因为第二个 EstatePoeple 数组除了被过滤的人之外什么都没有。所以我将不得不通过数组的索引和它们出现的位置来合并这两个数组。
有人可以帮助我了解如何获得性能相对较好的所需文档吗?
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query aggregation-framework