MongoDB:返回地理空间查询中没有坐标的记录

MongoDB:返回地理空间查询中没有坐标的记录,mongodb,Mongodb,我有一个带有地理空间字段“位置”的“用户”集合。“位置”是可选的。 我需要写一个查询,当结果应该从一个半径范围内的用户列表开始,然后以一个没有任何位置的用户列表结束 查询示例: db.User.find({ location: { $nearSphere: [ -104.578457, 19.684754 ], $maxDistance: 100/3963.2 } }) 或 我的问题: 这个查询只返回带有填充位置的记录,但我也需要没有任何位置的记录。我需要像这样的东西: db.User.fin

我有一个带有地理空间字段“位置”的“用户”集合。“位置”是可选的。 我需要写一个查询,当结果应该从一个半径范围内的用户列表开始,然后以一个没有任何位置的用户列表结束

查询示例:

db.User.find({ location: { $nearSphere: [ -104.578457, 19.684754 ], $maxDistance: 100/3963.2 } })

我的问题: 这个查询只返回带有填充位置的记录,但我也需要没有任何位置的记录。我需要像这样的东西:

db.User.find({ location: { $nearSphere: [ -104.578457, 19.684754 ], $maxDistance: 100/3963.2 } })
    UNION
db.User.find({ location: { $exists: false }})

你有什么办法解决我的问题吗MapReduce不是一个变体

单次查询不可能实现这一点。在单个查询中包含备用结果的唯一方法是使用
$或
条件,而这在类似
$nearSpere
的地理空间查询中是不允许的。您需要两个查询。根据您的语言实现,通过并行运行两个操作并组合结果,这应该非常简单。例如node.js就有库。@BlakesSeven谢谢您的回答。两个查询的问题是它排除了将来可能的分页。这不是很好solution@BlakesSeven . @user3100115基本情况未解释存在不能与
$或
混合使用的“特殊索引”(靠近查询和“文本”需要特殊索引)<例如,code>$geoinsin
不需要索引,如果与
$或
结合使用,则不会使用索引。好的。因此,如果“分页”需要不同的结果,那么它们的排名如何?什么决定了在页面中显示哪些“接近”结果以及显示哪些“无位置”结果?它们是混合的还是一种——它总是意味着处于顶端?是否有其他影响排名的字段可供排序。您的基本问题是,这不可能在一个查询中实现。但是你还没有为你想要达到的结果提出正确的问题。需要更多信息。单次查询不可能做到这一点。在单个查询中包含备用结果的唯一方法是使用
$或
条件,而这在类似
$nearSpere
的地理空间查询中是不允许的。您需要两个查询。根据您的语言实现,通过并行运行两个操作并组合结果,这应该非常简单。例如node.js就有库。@BlakesSeven谢谢您的回答。两个查询的问题是它排除了将来可能的分页。这不是很好solution@BlakesSeven . @user3100115基本情况未解释存在不能与
$或
混合使用的“特殊索引”(靠近查询和“文本”需要特殊索引)<例如,code>$geoinsin
不需要索引,如果与
$或
结合使用,则不会使用索引。好的。因此,如果“分页”需要不同的结果,那么它们的排名如何?什么决定了在页面中显示哪些“接近”结果以及显示哪些“无位置”结果?它们是混合的还是一种——它总是意味着处于顶端?是否有其他影响排名的字段可供排序。您的基本问题是,这不可能在一个查询中实现。但是你还没有为你想要达到的结果提出正确的问题。需要更多信息。
db.User.find({ location: { $nearSphere: [ -104.578457, 19.684754 ], $maxDistance: 100/3963.2 } })
    UNION
db.User.find({ location: { $exists: false }})