MongoDB - 根据日期返回查询结果

333
我在mongodb中有这样的数据
{ 
    "latitude" : "", 
    "longitude" : "", 
    "course" : "", 
    "battery" : "0", 
    "imei" : "0", 
    "altitude" : "F:3.82V", 
    "mcc" : "07", 
    "mnc" : "007B", 
    "lac" : "2A83", 
    "_id" : ObjectId("4f0eb2c406ab6a9d4d000003"), 
    "createdAt" : ISODate("2012-01-12T20:15:31Z") 
}

如何查询 db.gpsdatas.find({'createdAt': ??这里填什么??}),以便从数据库中将上述数据结果返回给我?

1
提到你使用的是哪个Node.js库会更有效,但根据示例看来似乎是mongoosejs。 - Grimnoff
12个回答

-1
我喜欢使用倒序日期。
{ 
    ...
    "createdAt" : 120112201531
}

在这种情况下,日期格式为"YYMMDDHHmmsss"(2位数年份+2位数月份+2位数日期+2位数小时+2位数分钟+2位数秒钟)。
然后你可以进行搜索,例如:
db.gpsdatas.find({"createdAt" : { $gte : 120112201531 }})

这样写起来更易读,也更容易编程。如果你想在不考虑时间的情况下使用日期过滤器,那么使用索引类型并采用"YYYYMMDD"这样的日期格式可以进一步提高性能。

要将这种字符串格式渲染为JavaScript中的日期对象,你可以使用像DayJS这样的模块,并结合CustomParseFormat插件:

const date1 = dayjs('120112201531', 'YYMMDDHHmmsss')
const date2 = dayjs('20120112', 'YYYYMMDD')

https://day.js.org/docs/en/plugin/custom-parse-format


哦天哪,你从来没听说过2000年问题吗? - undefined
好的,但这是用于大于2000年的日期,就像一个“时间戳”。如果您需要更详细的日期,只需使用完整的日期。很简单。 - undefined

-3
如果您想从日期时间中获取一条记录,可以使用以下方法:
(mongodbCompass 3.6.8 with PyMongo)
mongo.db.collection.aggregate([{"$match":{"object.object.key":{"$gte":ISODate('2021-01-27T00:00:00Z').toISOString()}}}])

db.collection.find({"object.object.key":{"$gte":ISODate('2021-01-27T00:00:00Z').toISOString()}})

1
除非您将日期存储为字符串,否则不需要使用toString()函数来处理日期。 - Phil
1
你应该在ISODate上使用new关键字,而不是将其转换为ISOString。 - ADITYA HAZARIKA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接