我很难用mongo查询为文档中的字段分配值:
我的架构是
var TestSchema = new Schema({
loc: {
lng: {
type: Number
},
lat: {
type: Number
}
},
radius: {
type: Number
}
});
module.exports = mongoose.model("Test", TestSchema );`
我想找到该字段提供的半径范围内的所有文件。
Test.find({'loc': {'$near':[0.001, 0.001] ,'$maxDistance': ???}});
我试过而不是??? :this.radius
但似乎没有奏效。
感谢。
答案 0 :(得分:0)
您无法在标准查询操作中以这种方式分配文档中的值。而是使用此处aggregation framework来“投射”从查询点开始的距离,然后看到该距离落在文档的指定半径范围内。
您使用$geoNear
管道运算符来投影距离和$redact
操作,以删除不符合半径范围内的文档:
Test.aggregate(
[
{ "$geoNear": {
"near": [0.001, 0.001],
"distanceField": "distance"
}},
{ "$redact": {
"$cond": {
"if": { "$lt": "$distance", "$radius" },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
],
function(err,results) {
}
)
注意$geoNear
运算符上的选项。需要“distanceField”,因为这是表示与查询点的距离的字段。其他选项如“球形”和“distanceMultiplier”可能适用,具体取决于您的索引是“2sphere”还是分别使用传统的GeoJSON坐标对。