我正在使用mongodb
数据库,并想在2 $lookup
上应用collections
,但要有特定条件。我有一个collection
像这样[Company
new Schema({
name: String,
benefit: String,
benefitDesc: String,
company_url: String,
logoUrl: String,
coverUrl: String,
desc: String,
createdAt: String,
categoryId: { type: Schema.Types.ObjectId, ref: 'categories' },
})
和另一个名为collection
的Referrallinks
这样
new Schema({
referral_link: String,
referral_code: String,
isLink: Number,
offer_name: String,
offer_desc: String,
user_email: String,
companyId: { type: Schema.Types.ObjectId, ref: 'companies' },
addedByAdmin: { type: Boolean, default: true },
number_of_clicks: Number,
referral_country: String,
link_status: String,
categoryId: { type: Schema.Types.ObjectId, ref: 'categories' },
number_of_clicks: { type: Number, default: 0 },
createdAt: String,
updatedAt: String,
userId: { type: Schema.Types.ObjectId, ref: 'users' }
})
现在当我应用此$lookup
Company.aggregate([{
$lookup: {
from: 'referrallinks',
localField: '_id',
foreignField: 'companyId',
as: 'referrals'
}
}])
所以我正在使所有以referrals
表示为array
的公司都这样
[
{name : '', benefit : '', benefiDesc : '', referrals : []},
{name : '', benefit : '', benefiDesc : '', referrals : []},
{name : '', benefit : '', benefiDesc : '', referrals : []},
.....
]
但是我只希望在每个company's
referrals
数组中具有link_status
值Approved
的引用。
我该如何实现?
使用$lookup with custom pipeline指定其他过滤条件:
Company.aggregate([{
$lookup: {
from: 'referrallinks',
let: { company_id: "$_id" },
pipeline: [{
$match: {
$and: [
{ $eq: [ "$$company_id", "$companyId" ] },
{ $eq: [ "$link_status", "Approved" ] }
]
}
}],
as: 'referrals'
}
}])