我有两个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