我想通过 Java 对集合运行
$near
查询。我不确定如何使用 QueryBuilder
或 BasicDbObject
来实现此目的。通过Java代码运行$near
查询的正确方法是什么?
下面是我的文档结构代码。 “位置”属性将类型存储为点,坐标存储经纬度。我已经在这个集合上创建了一个 2dsphere 索引。
BasicDBObject doc = new BasicDBObject("attr1", nextLine[0])
.append("attr2", nextLine[1])
.append("edge-metro-code", nextLine[6])
.append("location", new BasicDBObject("type", "Point")
.append("coordinates",latLong))
.append("attr3", nextLine[9])
.append("attr4", nextLine[10])
首先,您需要一个 maxDistance 和一个参考点来计算附近的文档。下面的代码展示了如何构建一个 DBObject 来查询附近的文档。
double[] coords = new double[2];
long distance = 100;
DBObject query = BasicDBObjectBuilder.start()
.push("location")
.add("$maxDistance", distance)
.push("$near")
.push("$geometry")
.add("type", "Point")
.add("coordinates", coords)
.get();
这将产生该 json:
{
"location": {
"$maxDistance": 100,
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [
0,
0
]
}
}
}
}
如果您使用的是 mongodb 2.2,上面的代码将不起作用。我必须使用以下内容:
double[] coords = new double[2];
long distance = 100;
DBObject query = BasicDBObjectBuilder.start()
.push("location")
.add("$maxDistance", distance)
.add("$near", coords)
.get();
json 将是:
{
"location" : {
"$maxDistance" : 100,
"$near" : [
0,
0
]
}
}
您可以在此处找到有关附近查询的更多信息: