Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么mongodb在使用gt和lt查询时包含范围之外的值?_Mongodb_Mongodb Query - Fatal编程技术网

为什么mongodb在使用gt和lt查询时包含范围之外的值?

为什么mongodb在使用gt和lt查询时包含范围之外的值?,mongodb,mongodb-query,Mongodb,Mongodb Query,我试图在mongodb中使用gt和lt过滤器获取范围内的一些数据,但它的行为异常,我不理解为什么它包含范围以下的数据。是因为字段是字符串吗?另外,如果我为lt设置一些随机大值,比如50000,gt为1,它应该返回所有字段,但它只返回一些记录。我不熟悉mongodb,但它应该和其他数据库一样。我无法找到我错在哪里 你说得对,这是因为“价格”字段是字符串。字符串使用字典顺序进行比较。在这里,我们可以找到如何比较字符串 比较两个字符串的算法很简单: 比较两个字符串的第一个字符 如果第一个字符串中的第一

我试图在mongodb中使用gt和lt过滤器获取范围内的一些数据,但它的行为异常,我不理解为什么它包含范围以下的数据。是因为字段是字符串吗?另外,如果我为lt设置一些随机大值,比如50000,gt为1,它应该返回所有字段,但它只返回一些记录。我不熟悉mongodb,但它应该和其他数据库一样。我无法找到我错在哪里


你说得对,这是因为“价格”字段是字符串。字符串使用字典顺序进行比较。在这里,我们可以找到如何比较字符串

比较两个字符串的算法很简单:

  • 比较两个字符串的第一个字符
  • 如果第一个字符串中的第一个字符大于(或小于)另一个字符串,则第一个字符串大于(或小于)第二个字符串。我们是 完成了
  • 否则,如果两个字符串的第一个字符相同, 以相同的方式比较第二个字符。重复此步骤,直到结束 任意一根线
  • 如果两个字符串以相同的长度结束,则它们是相同的 平等
  • 否则,越长的字符串越大
  • 例如,在您的结果中,有一个价格为“80”的文档,它不应该存在。运行上述算法比较“120”和“80”,我们得到:

  • 比较两个字符串的第一个字符:“1”<“8”。所以“120”<“80”,这就是结果中显示文档的原因。(您可以运行该算法以找出“80”<“800”)
  • 我建议,如果可能的话,您应该在MongoDB中将价格存储为“Number”类型。然后,您将能够按照自己的意愿使用数字比较