После прочтения о MongoDB и Geospatial Indexing
Я был поражен, что он не поддерживает составные ключи, не начинающиеся с 2d индекса.
Я не знаю, если яполучит что-нибудь на этом, но сейчас решение mssql такое же медленное / быстрое.
SELECT TOP 30 * FROM Villages WHERE SID = 10 ORDER BY (math to calc radius from the center point)
Это работает, но медленно, потому что недостаточно умно, чтобы использовать индекс, поэтому ему приходится вычислять радиусдля всех деревень с таким SID.
Так что в Mongo я хотел создать такой индекс, как: {sid: 1, loc: "2d"}
, чтобы я мог отфильтровать много с самого начала.
Я не уверен, что естьлюбые решения для этого.Я думал о создании коллекции для каждого sid
, поскольку они не делятся информацией.Но каковы недостатки этого?Или люди так делают?
Обновление
Карты плоские: 800, 800 до -800, -800, деревни - это места от центракарта и выход.Существует около 300 различных карт, которые не связаны между собой, поэтому они могут быть в разных коллекциях, но не уверены в накладных расходах.
Если требуется дополнительная информация, пожалуйста, дайте мне знать.
Что я пробовал
> var res = db.Villages.find({sid: 464})
> db.Villages.find({loc: {$near: [50, 50]}, sid: {$in: res}})
error: { "$err" : "invalid query", "code" : 12580 }
>
Также пробовал это
db.Villages.find({loc: {$near: [50, 50]}, sid: {$in: db.Villages.find({sid: 464}, {sid: 1})}})
error: { "$err" : "invalid query", "code" : 12580 }
Я не совсем уверен, что я делаю неправильно, но это, вероятно, что-то в синтаксисе,Запутался здесь.