首先,它是all_category_id
, not category_id
。其次,您不链接文章 - 所有文档都将具有完全相同的内容article_category
大批。最后,您可能想过滤掉没有匹配类别的文章。条件管道应该看起来更像这样:
db.article.aggregate([
{ $match: {
title: { $regex: /example/ }
} },
{ $lookup: {
from: "article_category",
let: {
article_id: "$article_id"
},
pipeline: [
{ $match: {
$expr: { $and: [
{ $in: [ 8, "$all_category_id" ] },
{ $eq: [ "$article_id", "$$article_id" ] }
] }
} }
],
as: "article_category"
} },
{ $match: {
$expr: { $gt: [
{ $size: "$article_category"},
0
] }
} }
] )
UPDATE:
如果你不匹配article_id
, the $lookup
将得到相同的结果article_category
数组到所有文章。
比方说你的article_category
集合还有另一个文档:
{
"article_id": 0,
"all_category_id": [5,8,10]
}
With { $eq: [ "$article_id", "$$article_id" ] }
在管道中产生的article_category
is
[
{
"article_id" : 2015110920343902,
"all_category_id" : [ 5, 8, 10 ]
}
]
without:
[
{
"article_id" : 2015110920343902,
"all_category_id" : [ 5, 8, 10 ]
},
{
"article_id": 0,
"all_category_id": [ 5, 8, 10 ]
}
]
如果您需要后者,则查找请求会更简单:
db.article.find({ title: { $regex: /example/ } })
and
db.article_category.find({ all_category_id: 8 })