当前位置: 首页 > 知识库问答 >
问题:

将gte投影选项用于Mongodb shell上的ISODate对象时出错

司空鸿禧
2023-03-14

我有一个以ISODate格式存储的时间戳字段的集合。此数据库由第三方填充。文档的子集如下所示:

collection{
    "_id" : "foobar/201310",
    "name" : "SomeName",
    "processedtime" : "2013-10-01T00:00:00.000Z",
    "value" : 375439
       .
       .
       .
}

处理时间字段中的数据类似于2014-10-21T12:13:12.056790

使用以下查询查询此集合时:

db.collection.find({},{processedtime:{$gte : ISODate("2014-10-21T00:00:00.000Z")}});

我收到以下错误:

不支持的投影选项“$gte”,“代码”:13097”;

当我将查询中的ISODate更改为“新日期”或将gte更改为gt时,我会遇到相同的错误

我正在使用版本2.4.6,我的查询是否存在一些配置或语法问题?我还想知道,既然数据输出到纳秒级,这是一个问题吗?我已经查找了这个错误,似乎没有人用这样的查询报告它。

共有2个答案

吕翰飞
2023-03-14

db.collection.find({},{处理时间:{$gte: ISODate("2014-10-21T00:00:00.000Z")}});应该是db.collection.find({处理时间:{$gte:"2014-10-21T00:00:00.000Z"}});

艾焱
2023-03-14

首先,您的查询条件(例如$gte条件)位于查找的第一个文档中,而不是第二个——这就是为什么您会出现投影错误——您说要返回所有文档(空条件字段-{}),然后在第二个字段中进行本质上毫无意义的投影。基本上,您的查询应该如下所示:

db.collection.find({processedtime:{$gte : ISODate("2014-10-21T00:00:00.000Z")}});

如果您只想返回特定字段,例如name和processedtime,您可以添加这样的投影。现在,您可以了解原始查询没有实际意义并引发错误的原因:

db.collection.find({processedtime:{$gte : ISODate("2014-10-21T00:00:00.000Z")}}, {_id : 0, name : 1, processedtime : 1});

您的示例文档表明,processedtime字段实际上并没有存储为ISODate,而似乎存储为字符串。这意味着您的查询应该是:

db.collection.find({processedtime:{$gte : "2014-10-21T00:00:00.000Z"}});

应该注意的是,这将使比较变得有点棘手,因为它将使用字典顺序来比较字符串值,这可能会导致奇怪的结果,但对于您的目的来说可能是可以的。

为了解释您缺乏结果,字符串类型位于BSON规范中的UTC datetime类型之前,这意味着如果您查找“大于”UTC datetime值的字符串,您将始终一无所获。

此外,如果您在processedtime上有一个索引,并运行一个查询来查找特定的数据类型(ISODate),那么它将只返回该类型的结果。因此,如果processedtime确实存储为字符串,那么无论由于类型不匹配而使用何种条件,该查询也将一无所获。

 类似资料:
  • 我是科特林·纽比。我有一组函数,它们接受和解析不同的输入(纯文本、json、xml),但具有相同的输出(和事件实例)。代码如下所示(完整版本见https://pastebin.com/UNJFGZsm): 当我尝试构建时,会出现如下错误: (44,11):外投影类型“功能1” 但是,如果我不使用函数,代码似乎可以正确构建和工作。 为什么?为什么问题似乎只影响

  • 问题内容: 我对Hibernate的 预测 和 标准 感到困惑。何时使用投影以及何时使用标准? 问题答案: 它们不是互斥的,您可以同时使用两者。投影通常在某些条件下使用。 简而言之,使用Hibernate Projections来仅查询要使用Criteria查询的一个实体或一组实体的属性的子集。您还可以使用预测指定条款和聚合函数一样,等等。这就像指 其 数据你抓取。就像修改SQL查询中的子句一样。

  • 泛型方法 在控制器中获取列表 测试 测试 结果[java.lang.ClassCastException] 为什么该类强制执行异常,因为criteria.SetProjection(pl)返回条件,然后返回相同列表的条件。 如何对此进行动态控制? 更新我!

  • 说明 该接口会根据指定订单的不同场景返回不同的投诉列表, 投诉前请调用此接口 地址URL /v1/common/Complaint/getReasonList 支持格式 {url}?k1=v1&k2=v2&k3=v3&... HTTP请求方式 GET 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes

  • 问题内容: 您好,我想按查询排除某些字段。我正在使用nodejs 但在结果集中,我一直在获取密码字段。 问题答案: 投影不适用于新的nodejs mongodb驱动程序…相反,您将不得不在 此处使用游标方法