mongodb - MongoDb 对日期字段进行排序,$match 和 $project 不起作用
问题描述
在 mongoDb 查询中按“日期”字段排序时,我没有看到任何类型的数据排序。“date_recorded”字段是一个日期字段。
我还尝试对 time_stamp 字段进行排序。无论是升序还是降序,排序顺序似乎都不起作用。
我似乎无法弄清楚为什么它不起作用。我已经尝试过: - 使用“聚合”选项卡的指南针。- Robo3t - 使用 NodeJs 的 VSCode(模式模型查询)
输出始终相同。
任何帮助来完成这项工作将不胜感激......
我一直在搜索谷歌并尝试不同的东西大约两个小时。
这是我的查询:
db.getCollection('inputData').aggregate(
{ $match: { "inputData_userID": { $eq: "user1" } } }
,{ $project: { "date": 1 }}
,{ $sort: { "date_recorded": -1 }}
,function (err, docs) {}
)
这是输出:
/* 1 */
{
"_id" : "0f30df7453b6096da524d3b61ce75eb1",
"date" : "4/13/2017"
}
/* 2 */
{
"_id" : "081be472b94804ae597706aa2bc4d9f4",
"date" : "4/18/2017"
}
/* 3 */
{
"_id" : "0005933cda516a4df346bf0807ab6ca4",
"date" : "5/19/2017"
}
/* 4 */
{
"_id" : "3a67cc9a5eb0a9197fa5448773bfec88",
"date" : "4/14/2017"
}
/* 5 */
{
"_id" : "1aefe9e79faaf4d65c6194b162311e08",
"date" : "4/13/2017"
}
/* 6 */
{
"_id" : "3f4c9d65c207d5cf620a00cee062a4c8",
"date" : "4/13/2017"
}
这是另一个查询:
db.getCollection('inputData').find(
{ "inputData_userID": { $eq: "user1" } }
,{ "_id": 0, "date": 1, "date_recorded": 1 }
,{ $sort: { "date_recorded": -1 }}
)
这是此查询的输出结果:
/* 1 */
{
"date_recorded" : ISODate("2017-04-13T08:54:24.024Z"),
"date" : "4/13/2017"
}
/* 2 */
{
"date_recorded" : ISODate("2017-04-18T22:01:20.767Z"),
"date" : "4/18/2017"
}
/* 3 */
{
"date_recorded" : ISODate("2017-05-19T00:03:03.081Z"),
"date" : "5/19/2017"
}
/* 4 */
{
"date_recorded" : ISODate("2017-04-14T06:12:55.320Z"),
"date" : "4/14/2017"
}
/* 5 */
{
"date_recorded" : ISODate("2017-04-13T23:53:22.692Z"),
"date" : "4/13/2017"
}
/* 6 */
{
"date_recorded" : ISODate("2017-04-13T08:55:38.721Z"),
"date" : "4/13/2017"
}
解决方案
一个聚合管道阶段的输出为下一个阶段提供输入,因此您需要将其包含date_recorded
在您的$project
阶段中,以便您可以在接下来的阶段中对其进行排序$sort
。但是您还需要将阶段放在一个数组中,而不是将它们作为单独的参数提供:
db.getCollection('inputData').aggregate([
{ $match: { inputData_userID: "user1" }}
,{ $project: { date: 1, date_recorded: 1 }}
,{ $sort: { date_recorded: -1 }}]
,function (err, docs) { ... }
)
请注意,我还简化了您的$match
表达式,因为您不需要在$eq
此处使用。
推荐阅读
- mongodb - mongos“bind_ip”和“bind_ip_all”之间的区别
- python - 查找具有元素 1...N 的列表的 K 个子集,同时保留元素的顺序
- reactjs - 在 useEffect 中更新组件状态
- python - 如何获取 pandas 数据框并覆盖 Excel 工作簿中的特定工作表
- xml - 如何使用 xmllint 从具有命名空间的 XML 中基于另一个节点值从节点获取值
- javascript - 如何在 react-native 组件中运行 async await 并延迟?
- python - 季节性分解
- javascript - 如何在页面上将小倍数的子组放在一起?
- django - 如何在不使用 Meta 类的情况下为 forms.py 中的表单元素分配属性?
- node.js - 如何在 Nodejs 中使用 express 制作中间件