mongodb - 使用聚合文档查找日期可以在多个范围内的文档
问题描述
我正在尝试编写一个查询,该查询基于日期范围数组进行过滤,并返回生日字段位于其中一个范围内的文档:
const users = await User.aggregate([
{
$match: {
birthday: {
$or: [
{
$lte: "1998-01-01T00:00:00.000Z",
$gte: "1997-01-01T00:00:00.000Z",
},
{
$lte: "2000-01-01T00:00:00.000Z",
$gte: "2001-01-01T00:00:00.000Z",
},
{
$lte: "2002-01-01T00:00:00.000Z",
$gte: "2003-01-01T00:00:00.000Z",
},
],
},
},
},
])
但是,这会返回此错误:
错误 MongoError:未知运算符:$ 或
知道怎么做吗?
解决方案
$or运算符是顶级运算符,它将对表达式数组执行逻辑运算$or
,而您需要在对象/元素数组中使用字段名称指定整个条件,如果是相同的字段,则需要在数组的所有元素中重复它,
更正如下语法,
{
$match: {
$or: [
{
birthday: {
$lte: "1998-01-01T00:00:00.000Z",
$gte: "1997-01-01T00:00:00.000Z"
}
},
{
birthday: {
$lte: "2000-01-01T00:00:00.000Z",
$gte: "2001-01-01T00:00:00.000Z"
}
},
{
birthday: {
$lte: "2002-01-01T00:00:00.000Z",
$gte: "2003-01-01T00:00:00.000Z"
}
}
]
}
}
推荐阅读
- angular - 使用指令将参数传递给子组件角度
- .net - 光标不生成唯一 ID
- angular - 自定义指令不适用于 mat-menu-item 指令 - 排序可能是一个问题
- ios - Main.storyboard 文件没有出现在我的新 Xcode 项目中?
- qt - 如何从 MenuBar QML 打开一个对话框
- angular - 当任何复选框被选中时,所有复选框都会被选中?
- ios - 将经过默认参数提升的对象传递给“va_start”
- c# - 在 asp dot net 的 div 标签内,TreeView 不可点击
- node.js - 用于安装角度的 jspm 返回“错误:EPERM:不允许操作,rmdir 'C:..\AppData\Local\.jspm\packages\npm\@angular\core@8.2.9\bundles'”
- r - 如何在ggplot的x轴上以周数为单位放置胎龄