mongo在$ group

时间:2017-12-18 18:51:44

标签: node.js mongodb mongodb-query

我有一个访问集合,我成功计算了每个位置的访问次数

访问模型:

{
    "_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":[

      ]
   }
]

我错过了什么?

0 个答案:

没有答案