gpt4 book ai didi

mongodb - PHP、Mongo 查询使用或和点表示法

转载 作者:行者123 更新时间:2023-12-04 05:48:31 25 4
gpt4 key购买 nike

我有一个让我发疯的问题!

我需要在 PHP 中翻译以下 Mongo 查询:
db.mycollection.find({$or: [ {'field.a': 45.4689, 'field.b': 9.18103}, {'field.a' : 40.71455, 'field.b': -74.007124} ]})
它从 shell 完美运行。

我认为查询应该通过以下方式转换为 PHP (var_dump):

Array
(
[$or] => Array
(
[0] => Array
(
[field.a] => 45.468945
[field.b] => 9.18103
)

[1] => Array
(
[field.a] => 40.71455
[field.b] => -74.007124
)

)

)

但我在 PHP 中没有得到任何结果!

为什么?
怎么了?
什么是正确的语法?

谢谢!

最佳答案

你的语法对我来说似乎很好,我认为主要问题是你使用的浮点数并不总是像你想象的那么准确——特别是如果你自己混淆了 45.4689 和 45.468945。对于浮点数的直接比较,您应该始终添加一个小的模糊因子。

在这种情况下,您似乎正在使用坐标?如果是这种情况,我建议你:

  • 交换 a 和 b 字段(以便您获得经度,然后是纬度)
  • 在“字段”上创建一个二维索引: ensureIndex( array( 'field' => '2d' ) );
  • 使用 geoNear最大距离很小,限制为 1,

  • 这应该提供一种更好的扫描点的方法。但是,您必须运行查询两次,因为 geoNear 命令不能执行 $or。

    如果您只有一组离散的点(就像您的评论似乎表明的那样),那么我建议不要查询浮点数,而只需添加一个命名城市的字段。

    关于mongodb - PHP、Mongo 查询使用或和点表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380923/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com