Mor*_*ton 1 mongodb aggregation-framework
我有一个代码查询$gte日期,它工作正常。
cityCollection.aggregate([
{
"$project": {
theater: true,
movie: {
$filter: {
input: {
$map: {
input: "$movie",
as: "movie",
in: {
cnName: "$$movie.cnName",
enName: "$$movie.enName",
releasedTime: {
$filter: {
input: "$$movie.releasedTime",
as: "movie",
cond: { $and:{
$gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ]
}}
}
}
}
}
},
as: "movie",
cond: "$$movie"
}
}
}
}
])
.then(drivers => res.send(drivers))
.catch(next);
Run Code Online (Sandbox Code Playgroud)
现在我想在两个日期之间查询,我尝试$lte在代码中添加如下内容:
releasedTime: {
$filter: {
input: "$$movie.releasedTime",
as: "movie",
cond: {
$gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ],
$lte: [ "$$movie", new Date(`${today} 22:00:00.000Z`) ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
{
"error": "An object representing an expression must have exactly one field: { $gte: [ \"$$movie\", new Date(1526328000000) ], $lte: [ \"$$movie\", new Date(1526335200000) ] }"
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些解决方案$and,所以我尝试在我的代码中添加$and如下内容:
releasedTime: {
$filter: {
input: "$$movie.releasedTime",
as: "movie",
cond: { $and:{
$gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ],
$lte: [ "$$movie", new Date(`${today} 22:00:00.000Z`) ]
}}
}
}
Run Code Online (Sandbox Code Playgroud)
它仍然显示相同的错误,我不知道应该尝试什么步骤。
任何帮助,将不胜感激。提前致谢。
它是方括号[]而不是大括号{},主要是因为它是聚合使用上下文中的“条件数组”。
releasedTime: {
$filter: {
input: "$$movie.releasedTime",
as: "movie",
cond: { $and:[
{ $gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ] },
{ $lt: [ "$$movie", new Date(`${today} 22:00:00.000Z`) ] }
]}
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您通常指的是$lt当您想要“最多”特定范围金额时。始终“小于”“下一个最高值”,而不是包含“可能的最大值”。
| 归档时间: |
|
| 查看次数: |
5328 次 |
| 最近记录: |