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

Mongodb查找结果错误Int64对象

韦阳晖
2023-03-14

我使用的是MongoDB 3.2.1/python 3.4/pymongo/pandas 0.17(尽管后两个可能与这个问题完全无关)。

我对MongoDB find有一个非常奇怪(和错误)的行为。

我有一个收藏,包含这样的文档:

 {
        "_id" : NumberLong(-1819413477243867792),
        "targetentity" : "NODOGENERICO .ag.HP_BAR_DEG_APP_1",
        "tx" : false,
        "ocname" : ".oc.serv6",
        "specificproblem" : null,
        "saf" : false,
        "iscriticalnode" : null,
        "checkmask" : null,
        "notificationidentifier" : 1347592,
        "province" : null,
        "usertext" : null,
        "additionaltext" : "AAA Invalid Response",
        "director" : ".temip.madrids01_director",
        "problemoccurences" : 1,
        "usertags" : null,
        "managedobject" : "NODOGENERICO .ag.HP_BAR_DEG_APP_1",
        "isacceptednode" : null,
        "elementcode" : null,
        "state" : "Terminated",
        "probablecause" : "Unknown",
        "ran" : false,
        "counttotal" : 1,
        "locationcode" : "NULL",
        "problemstatus" : "Closed",
        "structurednotes" : null,
        "collection" : "serv6",
        "operatornotes" : null,
        "alarmtype" : "CommunicationsAlarm",
        "workinfo" : null,
        "perceivedseverity" : "Major",
        "core" : true,
        "eventtime" : NumberLong(1467342666000),
        "originalseverity" : "Major",
        "vendor" : "Several",
        "controlelementcode" : null,
        "outageflag" : false,
        "incident" : null,
    }

这个“_id”基本上是使用Python 3.4的“Hash”内置方法计算的哈希。

问题是,在插入该id后,我找不到任何具有该id的元素。

我已经尝试过了(在这一点上,我直接在mongo终端上尝试这个,但在Pymongo上,它会得到相同的结果):

db.getCollection('unique_alarm'). find({"_id": NumberLong(-1819413477243867792)}

db.getCollection('unique_alarm'). find({"_id":-1819413477243867792})

对于两者,我都得到了这个:

在1ms内获取0条记录

我以为问题在于如何处理NumberLong,但对于field eventtime(具有相同类型),我绝对没有问题。

例如,如果我询问:

db.get集合('unique_alarm'). find({"eventtime": NumberLong(1467342666000)})

或者:

db。getCollection(“唯一报警”)。查找({“eventtime”:1467342666000})

这两个查询都会再次返回第一个文档,没有问题。

有什么线索吗?为什么前两个查询返回0个结果?

有关我的尝试和错误的更多信息:

  • 无论字段是“_id”还是其他任何字段,我都无法搜索这些数字

共有2个答案

孟安民
2023-03-14

我认为你在mongo NumberLong的范围内达到了某种极限。

我打开了一个mongo控制台,这是输出

> NumberLong(-1819413477243867792)
NumberLong("-1819413477243867904")

所以我假设如果你通过NumberLong(“-1819413477243867904”)查找,你会神奇地找到你的记录,这可能会证明如果NumberLong,你的哈希值达到了某种mongo db限制。

寇靖
2023-03-14

答案可能很简单,但所有答案都与数字长度的值周围的引号有关。

插入数据和查询需要被引用

db.sofia.find({"_id" : NumberLong("-1819413477243867792")}).pretty()

{
        "_id" : NumberLong("-1819413477243867792"),
        "targetentity" : "NODOGENERICO .ag.HP_BAR_DEG_APP_1",
        "tx" : false,
        "ocname" : ".oc.serv6",
        ....
}
 类似资料:
  • 这个对话框包含用 查找文件 命令找到的条目。您可以选择一个或一个以上的文件然后选择“解压缩到”来解压它们。您也可以按下“查看”来查看光标所在处的文件或者是“定位”来在 WinRAR 的主窗口中选定这个文件。 因为技术限制,如果搜索时执行查找到的文件会有一定的延迟。 WinRAR 只有在当前正在处理的压缩文件已经被关闭时才执行这个命令。

  • 我是聚合框架的新手,有以下问题。 我的收藏是这样的: 用户 ActivitiesFeed 活动 聚合函数 如何使用第一个查找结果进行查找? 我查阅了activities集合。此集合保存第二个查找BaseData.UserID的id。但是使用这种方法,第二次查找没有结果。 我对activities集合进行连接的原因是actionID可以保存来自另一个集合的用户id或文档id。它取决于activiti

  • 问题内容: 我有一个数据库表看起来像这样 当我运行此查询时,应该不显示任何行,因为不存在具有value的行: SELECT * FROM tableName WHERE ID =‘101foo2’ 我得到的结果具有相同的ID,但没有单词 如果我的查询是如何显示具有ID的行 问题答案: 您正在混合类型。 是一个整数(或数字)。您正在将其与字符串进行比较。因此,MySQL需要确定用于比较的类型。使用什

  • 我有一个问题,就是对数据库的查询不能得到正确的结果。 在带有此查询的工作台中:

  • 问题内容: 我有此查询以获取月结果。但是我想得到今天的结果。 做这个的最好方式是什么? 问题答案: 您的开始日期对象应将当前日期时间设置为(毫秒精度),并将今天的时间设置为: 然后像往常一样在您的MongoDB查询运算符中传递修改后的日期对象: 如果您正在使用 momentjs 库,则可以通过在当前当前日期对象上使用 and 方法,并将字符串作为参数传递来实现:

  • 我试图从我的数据库中得到一些数据,但我不会得到正确的结果。 我的方法: 所以应该有一个确切的结果,但我从控制台得到的全部是:日期的范围是从今天(6月12日-2周) CEST 2012年Tue Jun 12 14:49:11 2012年东部时间5月30日星期三14:49:11