如何在mongodb中使用$ lookup和条件?

问题描述 投票:1回答:1

我正在使用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' },
})

和另一个名为collectionReferrallinks这样

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_statusApproved的引用。

我该如何实现?

mongodb mongoose nosql aggregation-framework lookup
1个回答
0
投票

使用$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'
    }
}])
© www.soinside.com 2019 - 2024. All rights reserved.