MongoDB Compass Community 1.16.3 $match 问题与 ObjectId + ISODate
MongoDB Compass Community 1.16.3 $match issue with ObjectId + ISODate
我正在尝试在 MongoDB Compass Community 1.16.3 上构建一个 aggregation
,我在 $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") }
}
此查询根本不起作用,Compass return 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
和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 Community 版本 (1.16.3)。
To solve it, update to the latest version or above: 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") }
}
我正在尝试在 MongoDB Compass Community 1.16.3 上构建一个 aggregation
,我在 $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") }
}
此查询根本不起作用,Compass return 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
和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 Community 版本 (1.16.3)。
To solve it, update to the latest version or above: 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") }
}