我想在MongoDB Compass社区1.16.3上建立一个aggregation
,我在同时查询$match
和ObjectId
的ISODate
阶段有一个奇怪的问题。
{
user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
value: {$gte: 600},
datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}
此查询根本不起作用,Compass返回Expected end of input but "}" found.
{
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
和ISODate
,似乎查询不起作用。那么,我在某处犯了错误吗?或者我必须在2个$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")
}
}
}]
问题来自我使用的MongoDB Compass社区版本(1.16.3)。
要解决此问题,请更新到最新版本或更高版本:1.17.0
现在,以下工作完美!
{
user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
value: {$gte: 600},
datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}