На първо място, това е all_category_id
, а не 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
] }
} }
] )
АКТУАЛИЗИРАНЕ:
Ако не отговаряте на article_id
, $lookup
ще доведе до идентичен article_category
масив към всички статии.
Да речем вашата article_category
колекцията има друг документ:
{
"article_id": 0,
"all_category_id": [5,8,10]
}
С { $eq: [ "$article_id", "$$article_id" ] }
в конвейера получената article_category
е
[
{
"article_id" : 2015110920343902,
"all_category_id" : [ 5, 8, 10 ]
}
]
без:
[
{
"article_id" : 2015110920343902,
"all_category_id" : [ 5, 8, 10 ]
},
{
"article_id": 0,
"all_category_id": [ 5, 8, 10 ]
}
]
Ако по-късното е това, от което се нуждаете, би било много по-лесно да направите търсене на заявки:
db.article.find({ title: { $regex: /example/ } })
и
db.article_category.find({ all_category_id: 8 })