猫鼬聚合 $lookup 如何根据条件更改 "from" 字段
Mongoose aggregation $lookup how to change "from" field depending on a condition
我想根据文档中的变量加入不同的 table
注意我正在使用 mongoose
$lookup: {
from: {
if: { $eq: [ "$ownerType", 2 ] },
then: 'hi',
else: 'hello'
},
localField: "ownerID",
foreignField: "_id",
as: "members"
}
你不能,from
字段不能是变量。
您可以关注此功能的开放票证here,但它已经开放超过 4 年,所以显然它不是最优先考虑的。
我建议您对每个条件使用 $facet,如下所示:
db.collection.aggregate([
{
$facet: {
cond1: [
{
$match: {
$expr: {$ne: ["$ownerType", 2]}
}
},
{
$lookup: {
from: "hello",
localField: "ownerID",
foreignField: "_id",
as: "members"
}
}
],
cond2: [
{
$match: {
$expr: {$eq: ["$ownerType", 2]}
}
},
{
$lookup: {
from: "hi",
localField: "ownerID",
foreignField: "_id",
as: "members"
}
}
],
}
}
]);
$match
条件使此查询的效率接近于单个 $lookup
,您可以将 $facet
阶段后的结果合并到一个数组中。
我想根据文档中的变量加入不同的 table 注意我正在使用 mongoose
$lookup: {
from: {
if: { $eq: [ "$ownerType", 2 ] },
then: 'hi',
else: 'hello'
},
localField: "ownerID",
foreignField: "_id",
as: "members"
}
你不能,from
字段不能是变量。
您可以关注此功能的开放票证here,但它已经开放超过 4 年,所以显然它不是最优先考虑的。
我建议您对每个条件使用 $facet,如下所示:
db.collection.aggregate([
{
$facet: {
cond1: [
{
$match: {
$expr: {$ne: ["$ownerType", 2]}
}
},
{
$lookup: {
from: "hello",
localField: "ownerID",
foreignField: "_id",
as: "members"
}
}
],
cond2: [
{
$match: {
$expr: {$eq: ["$ownerType", 2]}
}
},
{
$lookup: {
from: "hi",
localField: "ownerID",
foreignField: "_id",
as: "members"
}
}
],
}
}
]);
$match
条件使此查询的效率接近于单个 $lookup
,您可以将 $facet
阶段后的结果合并到一个数组中。