java - 按降序对数组进行排序并仅从数组中返回匹配的 elemnet
问题描述
/* 1 */
{
"_id" : ObjectId("5c4ff961d4404a0dccec4f71"),
"tier" : "3",
"agentName" : "Dial2Travel1",
"meeting" : [
{
"meetingDate" : ISODate("2019-01-23T00:00:00.000Z"),
"comment" : "call back after 4 days",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-02-23T00:00:00.000Z"),
"comment" : "wrong number",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-03-12T00:00:00.000Z"),
"comment" : "packages request",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
}
]
}
/* 2 */
{
"_id" : ObjectId("5c4ff961d4404a0dccec4f72"),
"tier" : "3",
"agentName" : "Dial2Travel2",
"meeting" : [
{
"meetingDate" : ISODate("2019-01-23T00:00:00.000Z"),
"comment" : "call back after 4 days",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-02-23T00:00:00.000Z"),
"comment" : "wrong number",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-03-12T00:00:00.000Z"),
"comment" : "packages request",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
}
]
}
/* 3 */
{
"_id" : ObjectId("5c4ff961d4404a0dccec4f73"),
"tier" : "3",
"agentName" : "Dial2Travel3-",
"meeting" : [
{
"meetingDate" : ISODate("2019-01-23T00:00:00.000Z"),
"comment" : "call back after 4 days",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-02-23T00:00:00.000Z"),
"comment" : "wrong number",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-03-12T00:00:00.000Z"),
"comment" : "packages request",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
}
]
}
/* 4 */
{
"_id" : ObjectId("5c4ff961d4404a0dccec4f74"),
"tier" : "3",
"agentName" : "Dial2Travel4",
"meeting" : [
{
"meetingDate" : ISODate("2019-01-23T00:00:00.000Z"),
"comment" : "call back after 4 days",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-02-23T00:00:00.000Z"),
"comment" : "wrong number",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
},
{
"meetingDate" : ISODate("2019-03-12T00:00:00.000Z"),
"comment" : "packages request",
"meetingDoneBy" : {
"$ref" : "salesExecutive",
"$id" : ObjectId("5c6b9dc9d56dbad67a951786")
}
}
]
}
我想按降序对会议数组进行排序,然后应用分页以仅检索响应中的匹配会议而不是完整的数组。因此,对于第一页,我想请求 5 次会议,那么只有 5 次会议将被返回/投影。在第二页请求下一个 5 等等。目前我得到的是一系列完整的会议。这不是我想要的。
解决方案
试试这个聚合查询:
var pageNum = 1;
var resPerPage = 5;
var skipAmt = pageNum * resPerPage;
db.Test.aggregate([
{
$unwind: "$meeting"
},
{
$project: {
"_id": 0,
"meeting": "$meeting"
}
},
{
$sort: {
"meeting.meetingDate": - 1
}
},
{
$skip: skipAmt
},
{
$limit: resPerPage
}
]);
推荐阅读
- .net - 如何创建 Windows 探索风格的功能区栏?
- pandas - 熊猫滚动具有多列的数据框
- mysql - 使用带有外键的 MySQL 连接三个表
- python - 在 Python 3.6+ 中尽早结束进程
- rest - 查询gitlab访问令牌的访问权限
- python - 使用 flask-sqlalchemy 创建 mysql 表不起作用
- react-native - 在 React Native 中使用 ref 时如何清除占位符文本?
- android - 错误:“清单中未找到版本代码。”
- algorithm - 断边联合查找算法
- jquery - 访问从不同来源加载的 iframe 的内容