gpt4 book ai didi

java - MongoDB——Java | $near 的使用

转载 作者:可可西里 更新时间:2023-11-01 09:54:53 26 4
gpt4 key购买 nike

我正在像这样在 MongoDB 集合中保存一些帖子:

{
"_id": {
"$oid": "56e7152edbaacc2ab1d34f20"
},
"title": "the title",
"body": "the post",
"loc": {
"lat": 40.616856,
"lng": 22.954689
},
"timestamp": "1457984814748",
"username": "User",
"fbID": "4324"
}

我想获取特定比例(比方说 2 公里)左右的帖子。

我试图找到 $near 是如何工作的,但在 mongodb java 文档中找不到关于此函数的文档。如果有人知道我该怎么做或在哪里可以找到相关文档,我们将不胜感激。

这是我目前正在尝试的,其中 texts 是来自数据库的集合:

        QueryBuilder query = new QueryBuilder();
query.put("loc").near(22.9545545, 40.616479, 50);
MongoCursor<Document> cursor2 = texts.find((BasicDBObject) query.get()).iterator();
try {
while (cursor2.hasNext()) {
Document doc = cursor2.next();
documents.add(doc);
}
} finally {
cursor2.close();
}

我也试过这个:

Double locationLongitude = new Double (22.9545545);
Double locationLatitude = new Double (40.616479);
BasicDBObject locQuery = new BasicDBObject ();
locQuery.put("loc", new Document("$near", new Double[]{locationLongitude, locationLatitude}));
MongoCursor<Document> cursor2 = texts.find(locQuery).iterator();
try {
while (cursor2.hasNext()) {
Document doc = cursor2.next();
documents.add(doc);
}
} finally {
cursor2.close();
}

更新

经过一番研究,我得出了这个结论:

我将我的 json 文档更改为:

{
"_id": {
"$oid": "56e9e7440296451112edd05d"
},
"title": "ρ",
"body": "ρ",
"lng": 22.954689,
"lat": 40.616856,
"loc": {
"type": "Point",
"coordinates": [
22.954689,
40.616856
]
},
"timestamp": "1458169668154",
"username": "User",
"fbID": "4324"
}

和我的 java 代码:

        collection.createIndex(new Document("loc", "2dsphere"));
MongoCursor<Document> cursor = collection.find(near("loc", 22.9548626, 40.6159144, 100.0, 0.0)).iterator();

try {
while (cursor.hasNext()) {
Document doc = cursor.next();
documents.add(doc);
}
} finally {
cursor.close();
}

但仍然没有得到任何结果.. cursor 没有文件。我也遇到了这个错误

03-17 01:34:05.489 1786-1805/? W/System.err: com.mongodb.MongoQueryException: Query failed with error code 17007 and error message 'Unable to execute query: error processing query: ns=posts2.texts2 limit=0 skip=0 03-17 01:34:05.489 1786-1805/? W/System.err: Tree: GEONEAR field=loc maxdist=100 isNearSphere=0 03-17 01:34:05.489 1786-1805/? W/System.err: Sort: {} 03-17 01:34:05.489 1786-1805/? W/System.err: Proj: {} 03-17 01:34:05.489 1786-1805/? W/System.err: planner returned error: unable to find index for $geoNear query' on server ds011439.mlab.com:11439

最佳答案

我认为你的错误在这里
MongoCursor<Document> cursor = collection.find(near("loc", 22.9548626, 40.6159144, 100.0, 0.0)).iterator();

在您的 json 格式中,您的“loc”字段类型为:Point。 near函数有另一个构造函数是 near(String field, Point point, Double max, Double min)所以而不是 22.9548626, 40.6159144,你应该使用 Point .

你可以像这样创建一个点:

Position position = new Position(22.9548626,40.6159144);
Point point = new Point(position);

Here是文档。

试一试。

关于java - MongoDB——Java | $near 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com