查询以获取最新的三个用户,按日期排序-Mongoose Node.js
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询以获取最新的三个用户,按日期排序-Mongoose Node.js相关的知识,希望对你有一定的参考价值。
这是来自Mongodb的数据(Task.json)
"username": "john",
"taskId": "001",
"date": "2020-02-18T20:14:19.000Z",
,
"username": "david",
"taskId": "001",
"date": "2020-02-18T21:48:19.000Z",
,
"username": "john",
"taskId": "002",
"date": "2020-02-15T20:20:32.000Z",
... many more
我要达到的目标
- 我正在尝试编写一个查询,该查询返回
taskId
并列出执行任务的最新users
(按date
排序-降序排列。 - 我只希望执行任务的最后三个用户显示在列表中,因此
user
数组不应为每个任务包含更多的3个用户
这是我创建的有关如何使响应成为示例:
"tasks": [
"taskid": "001",
"users": [
"username": "david",
"date": "2020-02-18T21:48:19.000Z"
,
"username": "john",
"date": "2020-02-18T20:14:19.000Z"
]
,
"taskid": "002",
"users": [
"username": "john",
"date": "2020-02-15T20:20:32.000Z"
]
]
我到目前为止的进展:
router.route("/latest-tasks").get((req, res) =>
Task.find()
.sort( date: "desc" )
.then(doc =>
res.status(200).json(
taskId: doc.taskId,
list: doc.map(doc =>
return
username: doc.username,
date: doc.date
;
)
)
)
.catch(err => res.status(400).json("Error: " + err));
);
答案
我建议您使用MongoDB聚合来执行此操作。该查询应该工作:
Todo.aggregate([
$sort: taskId: 1, date: 1
,
$group:
_id: "$taskId",
users:
$push: username: "$username", date: "$date"
,
$project:
_id: "$taskId",
users: [
$filter:
input: [
$arrayElemAt: ["$users", 0] ,
$arrayElemAt: ["$users", 1] ,
$arrayElemAt: ["$users", 3]
],
as: "user",
cond: $ne: ["$$user", null]
,
],
])
说明:
....
以上是关于查询以获取最新的三个用户,按日期排序-Mongoose Node.js的主要内容,如果未能解决你的问题,请参考以下文章
Sql 查询以获取最多 10 条的最新记录并按提到行排名的字段排序 [关闭]
如何以正确的顺序链接查询集,而不是按日期排序,按foreignKey排序?
如何构建查询以获取每个用户的最新行,其中第三个条件位于单独的表中?