2016-03-15 32 views
0

我對NoSQL非常陌生,所以我想知道如何以NoSQL(DynamoDB,...)方式實現以下sql查詢?是甚至可能或將採取一種全新的方法?如何在NoSQL中實現select ...?

以下查詢查找所有記錄在200μm的半徑繞38.698 ...經度& -9.416 ...緯度(查詢經度和緯度是表中的字段保持各GPS值):

SELECT *, (6371 * acos(cos(radians(38.6985559)) * cos(radians(latitude)) * 
cos(radians(longitude) - radians(-9.4186706)) + sin(radians(38.6985559)) * 
sin(radians(latitude))))*1000 AS distance FROM locationtable HAVING 
distance < 200 ORDER BY distance LIMIT 0 , 100; 

這怎麼實現?我意識到一些NoSQL數據庫有一些地理數據庫,但如果以上是需要的,是否有可能以某種方式「翻譯」?

感謝

+0

對不起,但太廣泛回答任何多種技術。如果您瞭解SQL語句的含義,那麼也很容易找到。這是標準的「與給定點的距離」查詢。是的,所有數據庫都有自己的具體方法來做到這一點。 –

回答

1

您可以準確,使用N1QL,這是等價的SQL JSON文件實際上做。 N1QL支持弧度,cos,acos,sin和所有其他三角函數。 您應該嘗試使用Couchbase 4.5 DP並將其粘貼到查詢UI。

我檢查了它,它是按原樣工作(幾乎除了「as」關鍵字),只是將表名稱交換到相應的存儲桶。

+0

非常感謝 – chrisb

2

我試着用AS條款N1QL,它被接受但沒有正確選擇。這對我有效:

SELECT * 
FROM table 
LET computedValue = yourFormula, other attributes... 
WHERE condition including computedValue 
+0

嘗試這個,但仍然有一些問題: – chrisb

+0

我這樣做:CREATE PRIMARY INDEX default; (弧度(38.6985559))* cos(弧度(緯度))* cos(弧度(經度) - 弧度(-9.4186706))+ sin(弧度(38.6985559))* 從默認值 LET距離= ))* sin(弧度(緯度))))* 1000 其中距離<200;我的數據是這樣的:{ 「BUSINESS_NAME」: 「名字」, 「類別」: 「類型」, 「STREET_ADDRESS」: 「街頭」, 「城市」: 「城」, 「郵編」: 「90000」, 「手機」: 「」, 「網站」: 「」, 「其他」: 「其他」, 「緯度」:38.6985559, 「東經」:-9.4186706 } 我缺少什麼? – chrisb

+0

嘗試刪除WHERE子句,以便您可以調試您的距離公式。 – geraldss