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

3

简单问题:
如何在Node.js上使用mongoose进行地理空间查询的正确方法?

复杂故事:
我用mongoose创建了一个具有空间索引的Schema。

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

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

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

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

预期只返回一个结果,仅限于框内。而另一方面,Mongoose返回所有三个结果。

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

这个问题说你应该使用find()而不是where, 但是当我尝试用where替换find时,我收到了错误'need an area > 0'的提示。 我检查了一下,我的边界框格式正确,左下角然后右上角。

怎么办? 使用mongoose以正确的方式进行地理空间查询,并使用边界框?


你生成的查询是什么样子? - Sergio Tulentsev
@SergioTulentsev 我该如何打印生成的查询? - Paul
啊,我以为你在用Rails。用Node的话,我就不知道了 :) - Sergio Tulentsev
1个回答

0

使用find()where()都无所谓。

您可以通过启用日志并检查控制台来查看mongoose发送到数据库的内容:mongoose.set('debug', true)


谢谢!谢谢!谢谢!我注意到我的坐标数组由字符串而不是数字组成,例如'78.0'而不是78。在通常的调试过程中我没有注意到这一点,只有现在才有了你的建议! - Paul
我使用node-inspector,它使用Chrome的开发者工具调试Node.js服务器应用程序。我刚刚注意到数字显示为蓝色,而字符串显示为红色,但字符串周围没有任何'或"字符。该死! - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接