mongodb - Mongoose / MongoDB 按多个日期范围聚合过滤器
问题描述
我有一个包含 365 个文档的集合。每个文件如下:
{
date: "2018-11-27T00:00:00.000Z",
title: "Went to school"
},
{
date: "2018-11-28T00:00:00.000Z",
title: "Bought a car"
}
我想按多个数据范围过滤文档。例子:
- 仅显示
2018-01-04
之前和之后创建的文档2018-11-24
- 结果不应包含在间隔中创建的文档
2018-05-06
-2018-06-07
等等
到目前为止,我得到了这个:
const dates = await Calendar.aggregate(
[{
$match: {
$and: [{
date: {
$not: {
$lte: new Date(2018, 0, 7),
}
}
},
{
date: {
$not: {
$gte: new Date(2018, 10, 15)
}
}
},
{
date: {
$not: {
$gt: new Date(2018, 6, 31),
$lt: new Date(2018, 7, 15)
}
}
}
]
}
},
{
$project: {
title: 1,
date: 1
}
}
]
).sort('date')
先感谢您!
解决方案
您需要在查询中使用$lte
和$gte
与单个date
对象
Calendar.aggregate([
{ "$match": {
"$and": [
{ "date": { "$lte": new Date(2018, 0, 7), "$gte": new Date(2018, 10, 15) }},
{ "date": { "$not": { "$lte": new Date(2018, 0, 7), "$gte": new Date(2018, 10, 15) }}}
]
}}
])
推荐阅读
- cmake - 如何使用 CMake FetchContent 链接 OpenSSL?
- arrays - 应该将所有找到的对象添加到数组中的函数,但发生了错误“预期表达式”
- c# - 有没有办法修复使用 Xamarin C# 找不到的 Runtime.cs 文件
- c# - 是否可以使用 .NET 5 Blazor 应用程序中的 Entity Framework 6 引用 .NET Framework 库?
- amazon-web-services - 如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?
- python - Python:如何将文件添加到带有时间戳的新目录?
- sql-server - 在 SQL Server 中创建公式
- geocode - Geocoder API - 从物理地址获取 Lat,Lng
- java - 使用 System.err.println() 时的奇怪行为
- html - %include% 组件隐藏网页上的其他元素