MongoDB $lookup 多个条件
MongoDB $lookup with multiple conditions
我在 MongoDB、items
和 categories
中有两个合集。
items
是
{
_id: "some_id",
category_A: "foo",
category_B: "bar",
}
并且categories
是
{
_id: "foo_id",
name: "foo",
type: "A"
},
{
_id: "bar_id",
name: "bar",
type: "B"
}
我正在尝试使用管道通过 $lookup
获取 foo_id
和 bar_id
,但我不明白为什么 category_A_out
数组总是 returns空。
这是 category_A
:
管道的相关步骤
{
from: 'categories',
"let": {
"category": "$name",
"type": "$type"
},
"pipeline": [{
"$match": {
$expr: {
$and: [
{ $eq: ["$category_A", "$$category"] },
{ $eq: ["$$type", "A"] }
]
}
}
}],
as: 'category_A_out'
}
我确定 foo
和 bar
存在于 categories
集合中。
我做错了什么?
let
应该用于声明 LEFT 集合 的变量,即 items
.
如果 category_A
包含类别名称,则需要与 name
匹配。
否则与 _id
匹配。
db.items.aggregate([
{
$lookup: {
from: "categories",
"let": {
"category_A": "$category_A"
},
"pipeline": [
{
"$match": {
$expr: {
$and: [
{
$eq: [
"$name", // Or Match with $_id if category_A holds id
"$$category_A"
]
},
{
$eq: [
"$type",
"A"
]
}
]
}
}
}
],
as: "category_A_out"
}
}
])
我在 MongoDB、items
和 categories
中有两个合集。
items
是
{
_id: "some_id",
category_A: "foo",
category_B: "bar",
}
并且categories
是
{
_id: "foo_id",
name: "foo",
type: "A"
},
{
_id: "bar_id",
name: "bar",
type: "B"
}
我正在尝试使用管道通过 $lookup
获取 foo_id
和 bar_id
,但我不明白为什么 category_A_out
数组总是 returns空。
这是 category_A
:
{
from: 'categories',
"let": {
"category": "$name",
"type": "$type"
},
"pipeline": [{
"$match": {
$expr: {
$and: [
{ $eq: ["$category_A", "$$category"] },
{ $eq: ["$$type", "A"] }
]
}
}
}],
as: 'category_A_out'
}
我确定 foo
和 bar
存在于 categories
集合中。
我做错了什么?
let
应该用于声明 LEFT 集合 的变量,即 items
.
如果 category_A
包含类别名称,则需要与 name
匹配。
否则与 _id
匹配。
db.items.aggregate([
{
$lookup: {
from: "categories",
"let": {
"category_A": "$category_A"
},
"pipeline": [
{
"$match": {
$expr: {
$and: [
{
$eq: [
"$name", // Or Match with $_id if category_A holds id
"$$category_A"
]
},
{
$eq: [
"$type",
"A"
]
}
]
}
}
}
],
as: "category_A_out"
}
}
])