作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的 MongoDB 集合构建:
当我尝试按 ID 过滤时,我得到了不一致的结果。例如,当我尝试通过输入过滤器查询来获取第一个条目时:
{_id:209383449381830657}
但是如果我输入例如第三个,它会正常工作。
{_id:191312485326913536}
我搜索了它是否是由于 int 太大但不是,所有 _id
值都是 Int64
并且它是生成所有条目的相同代码。
我真的不知道为什么会得到这个结果,也不知道为什么要在这里问。
编辑:
{_id:{"$gte":209383449381830657}}
它会找到该条目,但如果我输入 {_id:{"$eq":2093834449381830657 则不会}}
最佳答案
MongoDB Compass 使用 mongo 的 node.js 驱动。
209383449381830657 和 191312485326913536 都超过了 javascript 最大安全整数 (2^53-1)。
Javascript 不会以一致的方式处理大于该值的数字。
请注意,在您的文档中,这些数字被报告为 $numberLong
,表明它们没有使用 javascript 的默认 float 字表示。
要一致地查询这些数字,请在查询时使用NumberLong
构造函数,例如
{_id:NumberLong("209383449381830657")}
关于MongoDB 指南针 : can't filter a specific ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68695859/
我是一名优秀的程序员,十分优秀!