Node.js $,并与mongo/mongoose中的2dsphere组合
我正试图让这段代码正常工作(node+mongoose) 然后继续 找不到任何特殊索引:2d(需要索引),2d球体(需要索引 索引),用于:{$and:[{location:{$near:{$geometry:{type: “点”,坐标:[12.5386,41.884]},$maxDistance:1000}, {状态:{$size:1}}]} 我在mongo上有我的索引Node.js $,并与mongo/mongoose中的2dsphere组合,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正试图让这段代码正常工作(node+mongoose) 然后继续 找不到任何特殊索引:2d(需要索引),2d球体(需要索引 索引),用于:{$and:[{location:{$near:{$geometry:{type: “点”,坐标:[12.5386,41.884]},$maxDistance:1000}, {状态:{$size:1}}]} 我在mongo上有我的索引 { "location" : "2dsphere" } 我错过了什么? 非常感谢 编辑:添加文档结构 {
{
"location" : "2dsphere"
}
我错过了什么?
非常感谢
编辑:添加文档结构
{
"name" : "Frag",
"desc" : "Frag",
"host" : ObjectId("534047663164711f7e7a952f"),
"_id" : ObjectId("535d7d8b454017f874de2d42"),
"status" : [
{
"state" : "created",
"_id" : ObjectId("535d7d8b454017f874de2d43"),
"date" : ISODate("2014-04-27T21:58:35.406Z")
}
],
"users" : [
ObjectId("534047663164711f7e7a952f")
],
"location" : [
32.0652823,
34.7767135
],
"__v" : 0
}
您在这里犯了一些错误,因为您为实际定义为“遗留坐标对”的东西指定了GeoJSON坐标映射,这两者之间有很大的区别 当然,您应该做什么(您在我的收藏中的数据称为文档):
db.docs.find({
“地点”:{
“$near”:[12.5386,41.884],
“$maxDistance”:1000
},
“状态”:{“$size”:1}
})
但这是失败的,除非我实际上将索引类型改为“2d”:
db.docs.dropIndexes();
db.docs.ensureIndex({“位置”:“2d”})
然后,您将得到预期的文档结果
这是设计上的,因为“2dsphere”索引是为GeoJSON格式的数据设计的,来自文档:
操作符需要一个地理空间索引:GeoJSON点的2dsphere索引;传统坐标对的二维索引。默认情况下,使用2d索引的查询最多返回100个文档;但是,您可以使用limit()更改结果的数量
如果需要“2dsphere”索引,则坐标数据需要更改:
“loc”:{
“类型”:“点”,
“坐标”:[
32.0652823,
34.7767135
]
}
但直接的“解决办法”显然是使用“2d”索引,当然,如我所示,还可以更改语法。$,这在所有MongoDB查询中都有暗示。您不需要将其指定为包装器。在你的问题中显示文档。
location
实际上是顶级字段吗?谢谢您的帮助,添加到问题中。“位置”在哪里?它不在你的文档中。因为这看起来你有很多参考资料在这里,它实际上是在另一个集合中吗?即使指定了该其他收集文档的正确路径,也无法执行此查询,除非嵌入了该数据。似乎你需要了解猫鼬种群的局限性以及它能做什么。或者不按可能的情况去做。哎呀,我的错。复制粘贴错误,但我确实注意到我的一些文档缺少“位置”,这可能是问题所在吗?虽然这是奇怪的bc,如果我不包括“地位。大小”在发现它的作品完美。这是奇怪的;我添加了{“location”:“2d”}并使用了您建议的查询,但现在$maxdistance根本不起作用!它总是只返回按status.size筛选的所有文档,这也是一个bug吗?仅供参考,我在2.4.3版发布。@Pavel'PK'Kaminsky$maxdistance
是一个打字错误。应为$maxDistance
。同时检查您的实际点数是否超出您请求的范围。但我无法复制。索引类型是设计的。请参阅答案中的进一步注释。
{
"name" : "Frag",
"desc" : "Frag",
"host" : ObjectId("534047663164711f7e7a952f"),
"_id" : ObjectId("535d7d8b454017f874de2d42"),
"status" : [
{
"state" : "created",
"_id" : ObjectId("535d7d8b454017f874de2d43"),
"date" : ISODate("2014-04-27T21:58:35.406Z")
}
],
"users" : [
ObjectId("534047663164711f7e7a952f")
],
"location" : [
32.0652823,
34.7767135
],
"__v" : 0
}