将$exists应用于MongoDB聚合



我有两个mongo集合,结构如下:

客户

{
_id: ObjectId,
name: String,
companyId: ObjectId
}

公司

{
_id: ObjectId,
name: String,
rights: [
add: boolean,
edit: boolean,
shop: boolean
]
}

因此,每个客户都有一个公司ID,让我们可以查找可用的公司。权限。我需要列出哪些公司有客户,但根本没有商店属性。

到目前为止,我有这个:

db.getCollection('customers').aggregate([
{
$match: {}
},
{
$lookup: {
from: 'companies',
localField: 'companyId',
foreignField: '_id',
as: 'company'  
}
},
{
$project: {
companyId: '$company._id',
companyName: '$company.name',
shopSetting: '$company.rights.shop'

}
}
])

这似乎可以为我提供所有具有商店价值的公司(正确或错误(。但是,如果我只想看到那些根本没有商店领域的公司呢?我将如何修改此查询以实现此目的?我试着阅读mongo中的$exists字段,但这对我来说都是全新的,所以我不确定在哪里应用它。

注意:我需要从客户集合中查询公司,因为有些公司没有客户,我需要这个结果只能是分配给客户但没有权利的公司。商店属性现有

db.customers.aggregate([
{ $match: {} },
{
$lookup: {
from: "companies",
localField: "companyId",
foreignField: "_id",
as: "company",
pipeline: [
{
$match: {
$expr: {
$eq: [
{
$filter: {
input: "$rights",
as: "r",
cond: "$$r.shop"
}
},
[]
]
}
}
}
]
}
},
{
$project: {
companyId: "$company._id",
companyName: "$company.name",
shopSetting: "$company.rights.shop"
}
}
])

mongoplayground

最新更新