MongoDB聚合 - 从查找内的数组中仅选择相同的值
Posted
技术标签:
【中文标题】MongoDB聚合 - 从查找内的数组中仅选择相同的值【英文标题】:MongoDB Aggregation - Select only same value from array inside lookup 【发布时间】:2021-12-29 10:57:20 【问题描述】:我有这样的聚合:
Produk.aggregate([
$lookup:
from: "kis_m_kategoriproduks",
localField: "idSubKategori",
foreignField: "subKategori._id",
as: "kategori",
,
,
$unwind: "$kategori" ,
$sort: produk: 1 ,
$project:
_id: 0,
id: "$id",
dataKategori:
idKategori: "$kategori._id",
kategori: "$kategori.kategori",
idSubKategori: "$idSubKategori",
subKategori: "$kategori.subKategori",
,
,
,
])
当前结果是:
"status": "success",
"data": [
"dataKategori":
"idKategori": "6195bbec8ee419e6a9b8329d",
"kategori": "Kuliner",
"idSubKategori": "6195bc0f8ee419e6a9b832a2",
"subKategori": [
"nama": "Food",
"_id": "6195bc0f8ee419e6a9b832a2"
,
"nama": "Drink",
"_id": "6195bc258ee419e6a9b832a8"
]
]
我只想在subKategori
中显示_id
与idSubKategori
匹配的数据。这是我所期望的:
"status": "success",
"data": [
"dataKategori":
"idKategori": "6195bbec8ee419e6a9b8329d",
"kategori": "Kuliner",
"idSubKategori": "6195bc0f8ee419e6a9b832a2",
"subKategori": [
"nama": "Food",
"_id": "6195bc0f8ee419e6a9b832a2"
]
]
这是我的$kategori
架构:
const schema = mongoose.Schema(
kategori:
type: String,
required: true,
unique: true,
,
subKategori: [
id: mongoose.Types.ObjectId,
nama: String,
,
],
,
timestamps: false,
);
有什么建议吗?
【问题讨论】:
使用带有嵌套管道语法的 $lookup 在那里添加额外的过滤器docs.mongodb.com/manual/reference/operator/aggregation/lookup/… 嗨@AlexBlex,感谢您的回复,但您能为我提供一些示例吗?我是 MongoDB 的新手,我不能完全理解文档 【参考方案1】:我通过在$project
中添加$filter
来解决此问题,如下所示:
dataKategori:
idKategori: "$kategori._id",
kategori: "$kategori.kategori",
subKategori:
$arrayElemAt: [
$filter:
input: "$kategori.subKategori",
as: "sub",
cond: $eq: ["$$sub._id", "$idSubKategori"] ,
,
,
0,
],
,
,
参考:https://***.com/a/42490320/6412375
【讨论】:
以上是关于MongoDB聚合 - 从查找内的数组中仅选择相同的值的主要内容,如果未能解决你的问题,请参考以下文章