猫鼬不同的价值与排序

时间:2019-01-28 08:20:19

标签: mongodb mongoose aggregation-framework

我正在尝试用distinct()实现sort(),但是它不起作用。文档还说它不受支持,所以我尝试使用aggregate()查找值。

我尝试使用distinct()

HISTORY.distinct("source", { "sourcedBy": "Nithin" }, function (error, source) {
   console.log(source);
});

我正在获取输出,但是我希望结果以降序_id为基础,并限制为最后3个不同的值。

因此,我使用aggregate()编写了这样的查询

HISTORY.aggregate([
{ "$match": { "sourcedBy": "Nithin" } },
        { "$group": { _id: { source: "$source" } } },
        { "$project": { _id: 0, source: "$_id.source" } },
        { "$limit": 3 },
        { "$sort": { _id: -1 } }
    ]).exec((err, source) => {
        if (err) throw err;
        console.log(source);
    });

但是它给出了一个空数组。

我做错什么了吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总

const source = (await HISTORY.aggregate([
  { "$match": { "sourcedBy": "Nithin" } },
  { "$group": { "_id": "$source", "createdAt": { "$max": "$createdAt" }}},
  { "$sort": { "createdAt": -1 }},
  { "$limit": 3 }
])).map(({ _id }) => _id)

console.log(source)