我有一个访问集合,我成功计算了每个位置的访问次数
访问模型:
{
"_id": {
"$oid": "5a3969e2f4ea3e33ac5a523d"
},
"locationId": "5a395ccf210a1d35d0df4a58"
}
上面的locationId属于'对象'因为我学习了查找localField和foreignField必须是同一类型
nodejs code =>
let sort = { "count": -1, "locationId": 1 };
Visit.aggregate([
{
$match:{
$and: [
{ accountId: req.session.passport.user },
{
'details.dateTimeIn': {
$gte: new Date(dateFrom), $lte: new Date(dateTo)
}
}
]
}
},
{
"$group": {
//_id: name,
_id: "$locationId",
count: { $sum: 1 }
}
},
{ $sort: sort }
])
输出正常:
[
{
"_id":"5a395ccf210a1d35d0df4a58",
"count":20
}
]
而不是显示位置ID ID,以显示位置名称。地点集合的模式是:
{
"_id": {
"$oid": "5a395ccf210a1d35d0df4a58"
"name": "Tower A",
"__v": 0
}
}
研究表明我需要使用$ lookup来获得JOIN效果
所以我试过
{
"$lookup": {
from: "locations",
localField: "_id",
foreignField: "_id",
as: "locationdetails"
}
}
但比赛似乎破了。我得到的最接近的是位于' locationdetails'中的所有位置的列表。
但是上面的代码是空的locationdetails
[
{
"_id":"5a395ddf1d221918d0041313",
"count":20,
"locationdetails":[
]
}
]
我错过了什么?