我有集合user
和domain
,我想要一个结合它们的视图.
db.createView( "userDomainRelation", "user", [
{
$lookup:
{
from: "domain",
localField: "domain",
foreignField: "_id",
as: "matchDomain"
}
},
{
$project:
{
_id: 1,
email: 1,
firstName: 1,
lastName: 1,
accountType: 1,
domain: 1,
host: "$matchDomain.host",
isOpenDomain: "$matchDomain.isOpenDomain",
isPartnerDomain: "$matchDomain.isPartnerDomain"
}
}
] )
这是可行的,但我不希望domain
的字段作为array.unwind
:
db.createView( "userDomainRelation", "user", [
{
$lookup:
{
from: "domain",
localField: "domain",
foreignField: "_id",
as: "matchDomain"
}
},
{
$project:
{
_id: 1,
email: 1,
firstName: 1,
lastName: 1,
accountType: 1,
domain: 1,
host: "$matchDomain.host",
isOpenDomain: "$matchDomain.isOpenDomain",
isPartnerDomain: "$matchDomain.isPartnerDomain"
}
},
{
$unwind: "$host"
}
] )
对于每user
,host
总是存在于domain
中.如果我也解开isOpenDomain
和isPartnerDomain
,我只得到isOpenDomain
和isPartnerDomain
出现在"域"中的记录.为什么会这样?我该如何解决这个问题?我想要所有的域,即使isOpenDomain
或isPartnerDomain
是不存在的.
db.createView( "userDomainRelation", "user", [
{
$lookup:
{
from: "domain",
localField: "domain",
foreignField: "_id",
as: "matchDomain"
}
},
{
$project:
{
_id: 1,
email: 1,
firstName: 1,
lastName: 1,
accountType: 1,
domain: 1,
host: "$matchDomain.host",
isOpenDomain: "$matchDomain.isOpenDomain",
isPartnerDomain: "$matchDomain.isPartnerDomain"
}
},
{
$unwind: "$host"
},
{
$unwind: "$isOpenDomain"
},
{
$unwind: "$isPartnerDomain"
}
] )