我正在尝试aggregation
在MongoDB Compass Community 1.16.3上构建一个,但同时在$match
舞台查询时遇到了一个奇怪的问题。ObjectId
ISODate
非工作$match阶段
{
user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
value: {$gte: 600},
datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}
此查询根本不起作用,指南针返回Expected end of input but "}" found.
但是这些$match阶段有效
{
user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
value: {$gte: 600}
}
完美的结果!
{
value: {$gte: 600},
datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}
完美的结果!
ObjectId
如果我同时使用and ,查询似乎不起作用ISODate
。那么,我是不是在某个地方犯了错误?还是我必须把它分成两个$match
阶段?有什么想法吗?
已编辑
如果我将管道分成 2 个$match
阶段(我在此示例中删除value
) ,它运行良好,但我不知道这是否是一个好习惯以及它是否有效!
[{
$match: {
user_id: ObjectId("5c9168ec5530c90d0c5cd98a")
}
}, {
$match: {
datetime: {
$gte: ISODate("2019-02-01T00:00:00Z"),
$lt: ISODate("2019-04-01T00:00:00Z")
}
}
}]