无法对mongodb中的MomentJS对象进行排序
我在mongodb中存储了以下类型的对象: { _id: 5319b78ba96ea4ef5c99dd55, name: 'Test',无法对mongodb中的MomentJS对象进行排序,mongodb,sorting,momentjs,Mongodb,Sorting,Momentjs,我在mongodb中存储了以下类型的对象: { _id: 5319b78ba96ea4ef5c99dd55, name: 'Test', channel: 'Right one', showed: { _isAMomentObject: true, _i: '12.3.2014 21:45', _f: 'DD.MM.YYYY HH:mm', _l: null, _strict: null,
channel: 'Right one', showed: { _isAMomentObject: true, _i: '12.3.2014 21:45', _f: 'DD.MM.YYYY HH:mm', _l: null, _strict: null, _isUTC: false, _pf: [Object], _a: [Object], _d: Wed Mar 12 2014 21:45:00 GMT-0400 (EDT), _isValid: true, _lang: [Object] } }, 对于按降序排列的,您需要使用“-1”而不是“desc”。这是如何在shell中完成的:
db.collection.find({}).sort({'showed._i':-1}).limit(30)
此外,字段“show._i”存储为字符串,而不是日期。这些值需要转换为日期类型,以便通过排序返回正确的结果
检查post以了解将字符串转换为日期类型的方法,该方法返回的项目从2014年3月9日21:00开始,但我有日期为2014年3月23日18:00的项目,这是因为您将日期存储为字符串。按字符串排序时,“9.3.2014 21:00”大于“23.3.2014 18:00”。要返回正确的结果,您需要将日期存储为ISODate()对象。好的,我的数据库中已经有一些数据,因此需要进行某种转换才能使一切顺利运行。这是正确的。我已经编辑了我的文章,并提供了一个链接,提供了一个将字符串转换为日期的示例方法。谢谢你让它工作起来。在mongodb:)上转换非常容易。转换过程中的纯javascript只是摇摇晃晃(至少与PL/SQL相比是这样)。为什么要存储完整的对象,而只需要
Date
对象呢?不幸的是,除非您愿意将集合转换为使用标准日期格式,否则您将无法进行排序。看起来你的对象中可能有一个日期
,但它有一个时区(“EDT”
),而不是存储为UTC。我认为,d有ISO格式的日期,但你说EDT是一个额外的日期,不应该存在?除非所有日期都在同一时区,否则它不会工作。UTC需要跨时区进行统一排序。但是,如果一切都是EDT,您可以对该属性进行排序。
db.collection.find({}).sort({'showed._i':-1}).limit(30)