【发布时间】:2017-06-24 18:29:17
【问题描述】:
我有下一个 mongo 代码:
db.users.aggregate([
{
$match: {
$and: [
{ UserName: { $eq: 'administrator' } },
{ 'Company.CompanyName': { $eq: 'test' } }
]
}
},
{
$lookup: {
from: "companies",
localField: "CompanyID",
foreignField: "CompanyID",
as: "Company"
}
},
])
代码的$lookup 部分运行良好。我得到了下一个结果:
但是如果我在代码中添加$match,它什么也不会带来。
我发现问题出在第二个匹配:{ 'Company.CompanyName': { $eq: 'test' } },但我无法意识到它有什么问题。
有什么想法吗?
更新:
我也曾在$lookup 结果上尝试过$unwind,但没有运气:
db.users.aggregate([
{
$match: {
$and: [
{ UserName: { $eq: 'administrator' } },
{ 'Company.CompanyName': { $eq: 'edt5' } }
]
}
},
{ unwind: '$Company' },
{
$lookup: {
from: 'companies',
localField: 'CompanyID',
foreignField: 'CompanyID',
as: 'Company'
}
},
])
【问题讨论】:
-
两点: 1:您可以复制您认为应该返回的记录的示例吗?您的屏幕截图并不理想,因为在显示 CompanyName 字段之前公司数据已被截断 2:如果您仅使用 $match 部分运行,即没有 $unwind 或 $lookup,您会遇到同样的问题吗?
-
@VinceBowdren 1) 添加了带有完整公司对象的新图像。2) 与用户名匹配的 $match 仅运行良好,但公司字段仅使用查找,那么我如何在没有 $lookup 的情况下对其进行测试?
-
您需要在 $lookup 之后 $unwind
Company。 $unwind 之后在 company 字段上添加 $match 阶段 -
@AlexBerd chridam 的答案与您的版本相符。
-
@Veeram 你的评论也很有帮助
标签: mongodb mongodb-query aggregation-framework