我正在尝试用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);
});
但是它给出了一个空数组。
我做错什么了吗?
答案 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)