Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js $,并与mongo/mongoose中的2dsphere组合_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js $,并与mongo/mongoose中的2dsphere组合

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" } 我错过了什么? 非常感谢 编辑:添加文档结构 {

我正试图让这段代码正常工作(node+mongoose)

然后继续

找不到任何特殊索引:2d(需要索引),2d球体(需要索引 索引),用于:{$and:[{location:{$near:{$geometry:{type: “点”,坐标:[12.5386,41.884]},$maxDistance:1000}, {状态:{$size:1}}]}

我在mongo上有我的索引

{
    "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
}