【发布时间】:2020-08-05 20:18:20
【问题描述】:
我尝试按日期查询我的事件。所以每个事件都有开始日期和结束日期。
这些事件所在的集合的结构如下:
{
"_id": "5f2a7feae0c4e10017308fe5",
"events": [
{
"_id": "5f2a802ce0c4e10017308fe8",
"end": {
"dateTime": "2020-08-05T23:46:00.000Z"
},
"start": {
"dateTime": "2020-08-05T22:46:00.000Z"
}
}, ...
]
}
所以我尝试了以下聚合方法:
start 和 end 值是 ISO 字符串,在我的例子中是一年的开始和结束。
Collection.aggregate([
{ $match: {owner: owner_id}},
{$unwind: '$events'},
{ $match :
{ 'events.start.dateTime':
{$gte: start,
$lt: end
}
}
},
{$sort: {'events.start.dateTime': 1}},
{$group: {_id: '$_id', 'events': {$push: '$events'}}}
])
当我尝试使用 $match 过滤器时,我得到一个空数组。但是,如果我在没有 $match 过滤器的情况下尝试它。我从集合中取回所有事件。
有人知道问题出在哪里吗?
【问题讨论】:
-
你可以直接在 $match 中匹配检查这个mongoplayground.net/p/y135h4tmLvR 并且不需要 $unwind 和 $group
-
@turivishal 我用下面的 $match 查询试过了,但还是不行。
-
{ $match: { $and: [ {owner: owner_id}, { 'events.start.dateTime': {$gte: start, $lt: end } ] } },跨度>
-
所以你已经在控制台中检查了你的输入变量值是否正确。我在您的问题中看不到您提供的文档中的所有者字段
-
那么我认为使用
ISODate函数将start和end变量转换为日期应该可以为您解决问题。 stackoverflow.com/questions/31071999/date-comparison-in-mongodb/…
标签: node.js database mongodb backend