如果每个代理商都是users.type:"代理商"
这一切都很好,但是......
如果代理商没有users.type:"代理商",那么我也没有得到代理商
我希望得到他们有没有用户的所有代理天气。
如果我删除此行
d2$MthDD <- format(as.Date(d2$PickUpDate), "%m-%d")
然后我得到所有用户的所有代理商,无论他们是什么类型,所以这很糟糕
如果我插入该行,我会让所有代理商都有代理类型用户,但我不让所有无用户的代理商。
我希望有一种方法可以将// { $match: { 'users.type': 'agent' } },
置于用户{ $match: { 'users.type': 'agent' } },
任何人都有一个可以帮助的解决方法吗?
$lookup
嗯...我可以在$ agencyTable.aggregate([
{
$match: {}
},
{
$lookup: {
from: "users",
localField: "_id",
foreignField: "agency",
as: "users"
}
},
{ $unwind: { path: "$users", preserveNullAndEmptyArrays: true } },
// { $match: { 'users.type': 'agent' } },
{
$group: {
"_id": "$_id",
"phone": { "$first": "$phone" },
"website": { "$first": "$website" },
"address": { "$first": "$address" },
"googlemaps": { "$first": "$googlemaps" },
"rating": { "$first": "$rating" },
"activityDate": { "$first": "$activityDate" },
"users": { "$push": "$users" }
}
},
{
$addFields: {
"users": {
"$map": {
"input":"$users",
"as":"usr",
"in":{
"userID":"$$usr._id",
"userName":"$$usr.name",
"userPhone":"$$usr.phone"
}
}
}
}
},
{
$project: {
"_id" : 1,
"phone" : 1,
"website" : 1,
"address" : 1,
"googlemaps" : 1,
"rating" : 1,
"activityDate" : 1,
"users" : 1
}
}
])
中执行$match: { 'users.type': 'agent'
吗?这可能吗?
addfields
这个不行(不幸的是),因为没有代理商&#39;输入用户。 有很多“租客”#39;类型使用,所以如果我用租户替换代理,它工作得很好。
如果我保留它,我根本就没有结果。 Hmmmm ..... 我不明白 - 在我看来这应该有效!
答案 0 :(得分:1)
如果我的问题正确,您希望获得“代理”类型的用户和没有代理商的用户。
尝试将匹配查询更改为:
{
$match: {
$or: [
{
'users.type': 'agent'
},
{
"users": {$exists: false }
},
]
}
},