盒子地理空间查询中的猫鼬无法正常工作

Posted

技术标签:

【中文标题】盒子地理空间查询中的猫鼬无法正常工作【英文标题】:mongoose within box geo-spatial query does not work correctly 【发布时间】:2012-05-14 21:49:40 【问题描述】:

简单的问题: 在nodejs上使用猫鼬进行地理空间查询的正确方法是什么?

复杂的故事: 我用带有空间索引的猫鼬创建了一个模式

var MySchema = newSchema(
// skipped ...
    location : 
        type : [ Number ],
        required : true,
        index : '2d'
    ,
// skipped ...
);

然后我在表中插入了3个文件。 我可以使用 mongo 客户端和 mongoose 检索这些文档 使用db.mymodels.find()MyModel.find();

现在我尝试使用边界框进行地理空间查询。 mongo 客户端工作正常

db.mymodels.find(location: $within: $box: box)

在框中只返回一个结果。 另一方面,Mongoose 返回所有三个结果

query = MyModel.where(location: $within : $box : box);
query.run(cb)

This question 说你应该使用 find() 而不是 where, 但是当我尝试用 where 替换 find 时,出现错误 'need an area > 0' 我检查了,我的边界框格式正确,左下角然后右上角。

怎么办? 使用 mongoose 使用边界框进行地理空间查询的正确方法是什么?

【问题讨论】:

您生成的查询是什么样的? @SergioTulentsev 如何打印生成的查询? 啊,我以为你在使用 Rails。用节点,我不知道:) 【参考方案1】:

使用find()where() 都没关系。

您是否介意通过启用日志记录并检查您的控制台来发布 mongoose 向数据库发送的内容:mongoose.set('debug', true)

【讨论】:

谢谢谢谢谢谢!我注意到我的坐标数组由字符串而不是数字 '78.0' 而不是 78 组成,在通常的调试过程中我没有注意到它,只是现在有了你的建议! 我使用node-inspector,它使用chrome的开发工具调试nodejs服务器应用程序,我只是注意到数字显示为蓝色,而字符串显示为红色,但字符串没有任何'或'字符在他们周围。该死的!

以上是关于盒子地理空间查询中的猫鼬无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

无法查询嵌套的猫鼬数组?

在 mongo 上苦苦挣扎的地理空间查询

我目前有一个问题,我试图在 grapql 中查询嵌套的猫鼬对象,但似乎无法弄清楚

用于查找唯一文档的猫鼬查询

数组中的猫鼬查询,用于检索从索引 0 到 n 开始的元素,其中 n 是从最后一个元素开始的位置

带排序的猫鼬查询不起作用