我正在尝试检索注册日期为 2007 年的所有用户。我的语法似乎有问题。我不知道在哪里放置等式表达式,但这会给出以下错误:
MongoServerError: unknown top level operator: $year. If you have a field name that starts with a '$' symbol, consider using $getField or $setField.
db.users.aggregate([
{
$match: { $year: { $convert: { input: "$registered.date", to: "date" } } },
},
{$project:{_id:0, name:1}}
])
我知道 $convert string to date 代码正在工作,因为我把它放在
$project
中并且它正在工作:
db.users.aggregate([
{
$project: {
year: { $year: { $convert: { input: "$registered.date", to: "date" } } }
},
},
]); --> printing out the correct years
如何在 match 子句中使用此 $year 值执行限制以仅限制 2007 年?
问题是在
$match
阶段你无法从聚合算子入手。您需要 $expr
才能使用聚合运算符。
{
$match: {
$expr: {
$eq: [
{
$year: {
$convert: {
input: "$registered.date",
to: "date"
}
}
},
2007
]
}
}
}
请注意,
$convert
运算符可以使用 $toDate
运算符进行简化。
$toDate: "$registered.date"