MongoDB Compass社区1.16.3 $ match问题与ObjectId + ISODate

时间:2019-04-17 21:23:01

标签: mongodb aggregation-framework aggregation mongodb-compass

我正在尝试在 MongoDB Compass社区1.16.3 上构建aggregation,并且在$match阶段查询ObjectId和{ {1}}。

无效的 $ match 阶段

ISODate

此查询根本不起作用,指南针返回{ user_id: ObjectId("5c9168ec5530c90d0c5cd98a"), value: {$gte: 600}, datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") } }

enter image description here

但是这些 $ match 阶段都可以工作

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阶段(在此示例中,我删除了$match,它运行良好,但我不知道它是否是一个好方法练习,是否有效!

value

1 个答案:

答案 0 :(得分:0)

问题来自我使用的MongoDB Compass社区版本(1.16.3)。

  

要解决此问题,请更新至最新版本或更高版本:1.17.0

现在,以下内容可以正常工作!

private PagedList<T> mPagedList;
private PagedList<T> mSnapshot;
.......................
.......................
.......................
public T getItem(int index) {
    if (mPagedList == null) {
        if (mSnapshot == null) {
            throw new IndexOutOfBoundsException(
                    "Item count is zero, getItem() call is invalid");
        } else {
            return mSnapshot.get(index);
        }
    }

    mPagedList.loadAround(index);
    return mPagedList.get(index);
    }