提供以下收藏:
[
{
events: [
{
triggers: [
{
date: "2019-12-12T23:00:00"
}
]
}
]
}
]
我希望能够提取日期范围介于今天和明天之间的任何日期的文档。 使用以下查询:
db.collection.aggregate([
{
$match: {
"events.triggers.date": {
$gte: "2019-12-11T23:00:00.000Z",
$lt: "2019-12-12T23:59:00.000Z"
}
}
}
]);
但是,当我执行此操作时,查询似乎正在查看日期大于但小于或等于但不一定位于同一“触发”对象中的任何文档。
任何人都知道如何在这样的子数组中进行过滤(之后我将在查询中进行更多操作,因此查找将不起作用)并使日期搜索特定于子项?
答案 0 :(得分:0)
您快到了,查询中只有一些错误。这应该可行:
db.collection.aggregate([
{
'$match': {
'$and': [
{"events.triggers.date": { '$gte': "2019-12-11T23:00:00.000Z" }},
{"events.triggers.date": { '$lt': "2019-12-11T23:00:00.000Z" }}
]
}
}
]);
答案 1 :(得分:0)
所以我最终找到了它。
正在寻找解决方案的人。这里是:
elemMatch
db.collection.aggregate([
{
$match: {
"events.triggers": {
$elemMatch: {
"date": {
$gte: "2019-12-11T23:00:00.000Z",
$lt: "2019-12-12T23:59:00.000Z"
}
}
}
}
}
]);