(已解决)纠结的问题,Nodejs中mongoDB的sort对日期降序,排序无效果
(已解决)纠结的问题,Nodejs中mongoDB的sort对日期降序,排序无效果
原来是键值写错,写错它也不报错,555
运行环境:wind7 64Bit;MongoDB 2.2.2 64Bit;
我在学习todo例子时,mongoose的排序sort日期无效果。谷歌好久,从2.6.7版本升到最新,改变语法亦无果。最后我以为不是mongoose的问题,直接在MongoDB shell上试验,最终问题定位在MongoDB上。。。。
文本格式如下:
/* 1 / { “content” : “1”, “updated_at” : { "$date" : 1358800741358 }, "_id" : { "$oid" : “50fda765d7a5548023000001” }, "__v" : 0 } / 2 / { “content” : “2”, “updated_at” : { "$date" : 1358800744124 }, "_id" : { "$oid" : “50fda768d7a5548023000002” }, "__v" : 0 } / 3 / { "__v" : 0, "_id" : { "$oid" : “50fdb31692ea378422000001” }, “content” : “3.0”, “updated_at” : { "$date" : 1358891471780 } } / 4 / { "__v" : 0, "_id" : { "$oid" : “50fdb31b92ea378422000002” }, “content” : “5.9”, “updated_at” : { "$date" : 1358803772190 } } / 5 / { “content” : “sort1”, “updated_at” : { "$date" : 1358803755602 }, "_id" : { "$oid" : “50fdb32b92ea378422000003” }, "__v" : 0 } / 6 / { “content” : “sort2”, “updated_at” : { "$date" : 1358803759978 }, "_id" : { "$oid" : “50fdb32f92ea378422000004” }, "__v" : 0 } / 7 / { "__v" : 0, "_id" : { "$oid" : “50fdb35092ea378422000006” }, “content” : “sort3.0”, “updated_at” : { "$date" : 1358891454230 } } / 8 / { “content” : “change1”, “updated_at” : { "$date" : 1358890315521 }, "_id" : { "$oid" : “50ff054b92ea378422000007” }, "__v" : 0 } / 9 */ { “content” : “change2”, “updated_at” : { "$date" : 1358890326185 }, "_id" : { "$oid" : “50ff055692ea378422000008” }, "__v" : 0 }
这个截图更直接看出数据类型:
运行MongoDB Shell,用语法排序结果截图:
关键语法是:db.todos.find().sort({update_at:-1}),目的是对日期进行降序排列。 日期获取是:node.js里的date.now()。
初步怀疑:mongoDB的sort对长日期无效。(觉得不可能,这个功能太常用了) 但无论如何,都是挺纠结的小白问题,希望有人帮忙解答。。。
应该没有这个问题,我用了很久都没发现这个问题
我也用了很久没发现这个问题啊
不好意思,各位,我知道我错在哪里了。当我发现把键值updated_at写成update_at的时候,多么想用头去撞墙算了。。。5555
根据你的描述,问题可能出在键名的拼写错误上。在你的数据示例中,“updated_at”的键名写错了几次,导致排序无法按预期工作。
正确的键名应该是updated_at
而不是其他变体。下面是一个简单的示例代码,展示了如何使用Mongoose对日期字段进行降序排序:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// 定义Schema
const todoSchema = new Schema({
content: String,
updated_at: { type: Date, default: Date.now },
__v: { type: Number, select: false }
});
// 创建Model
const Todo = mongoose.model('Todo', todoSchema);
// 查询并排序
Todo.find()
.sort({ updated_at: -1 }) // 按updated_at字段降序排序
.exec((err, todos) => {
if (err) return console.error(err);
console.log(todos);
});
确保你的数据库中的键名与查询时使用的键名一致。如果键名写错,MongoDB将不会识别该键,从而导致排序失效。
从你的描述来看,你已经找到了问题所在,即键名拼写错误。希望这段代码示例能够帮助你更好地理解如何正确地进行排序操作。