我在数据库中有文件,其日期时间值如下:
{
"_id" : ObjectId("5a66fa22d29dbd0001521023"),
"exportSuccessful" : true,
"month" : 0,
"week" : 4,
"weekDay" : "Mon",
"dateTime" : ISODate("2018-01-22T09:02:26.525Z"),
"__v" : 0
}
我想:
查询数据库中的给定日期,如果日期匹配,则返回包含dateTime的文档(我不关心时间)。这主要是为了在插入此日期之前已经存在的文档之前进行测试。在上面的示例中,如果我的指定日期为2018-01-22
,我希望返回的文档。
从数据库中检索具有不同日期的所有文档(同样,我不关心时间部分)。如果有两个文件具有相同的日期(但不同的时间),则只返回第一个。
根据我的理解,Mongo的ISODate类型不允许我只存储日期,它总是必须是dateTime值。在我这边,我无法控制数据库中的内容。
答案 0 :(得分:1)
尝试范围查询,包括从当天开始到结束日期时间到当天结束的开始日期时间。所以基本上每天创建日期。
像
这样的东西var start = moment().utc().startOf('day');
var end = moment().utc().endOf('day');
db.collection.find({
dateTime: {
$gte: start,
$lte: end
}
})
获取所有不同的日期文件:
db.collection.aggregate(
{"$group":{
"_id":{
"$dateToString":{"format":"%Y-%m-%d","date":"$dateTime"}
},
"first":{
"$first":"$$ROOT"
}
}}])