如果我理解正确,您可以尝试以下查询之一:
第一个是使用管道进入$lookup 以匹配category 和name 在这样的一个阶段:
yourModel.aggregate([
{
"$lookup": {
"from": "category",
"let": {
"category": "$category",
},
"pipeline": [
{
"$match": {
"$expr": {
"$and": [
{
"$eq": [
"$id",
"$$category"
]
},
{
"$eq": [
"$name",
"Summer"
]
}
]
}
}
}
],
"as": "categories"
}
},
{
"$match": {
"categories": {
"$ne": []
}
}
}
])
例如here
其他方式是使用普通的$lookup,然后$filterjoin返回的数组。
yourModel.aggregate([
{
"$lookup": {
"from": "category",
"localField": "category",
"foreignField": "id",
"as": "categories"
}
},
{
"$match": {
"categories": {
"$ne": []
}
}
},
{
"$set": {
"categories": {
"$filter": {
"input": "$categories",
"as": "c",
"cond": {
"$eq": [
"$$c.name",
"Summer"
]
}
}
}
}
}
])
例如here
注意两个查询如何使用$match: { categories: { $ne : []}},这是因为如果查找没有找到任何结果,它会返回一个空数组。顺便说一句,这个阶段是可选的。
您还可以添加$unwind 或$arrayElemAt index 0 或其他任何内容以从数组中仅获取一个值。
此外,要在 mongoose 中执行此操作,您只需将 "Summer" 替换为您的变量。