Pertama-tama, ini adalah all_category_id
, bukan category_id
. Kedua, Anda tidak menautkan artikel - semua dokumen akan memiliki article_category
yang sama persis Himpunan. Terakhir, Anda mungkin ingin memfilter artikel yang tidak memiliki kategori yang cocok. Pipa bersyarat akan terlihat lebih seperti ini:
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
] }
} }
] )
PERBARUI:
Jika Anda tidak cocok dengan article_id
, $lookup
akan menghasilkan article_category
yang identik array ke semua artikel.
Misalnya article_category
. Anda koleksi memiliki dokumen lain:
{
"article_id": 0,
"all_category_id": [5,8,10]
}
Dengan { $eq: [ "$article_id", "$$article_id" ] }
dalam pipa article_category
. yang dihasilkan adalah
[
{
"article_id" : 2015110920343902,
"all_category_id" : [ 5, 8, 10 ]
}
]
tanpa:
[
{
"article_id" : 2015110920343902,
"all_category_id" : [ 5, 8, 10 ]
},
{
"article_id": 0,
"all_category_id": [ 5, 8, 10 ]
}
]
Jika nanti yang Anda butuhkan, akan lebih mudah untuk membuat permintaan pencarian:
db.article.find({ title: { $regex: /example/ } })
dan
db.article_category.find({ all_category_id: 8 })