2015-09-15 187 views
3

我可以使用視圖查詢文檔就好了,但切換到N1QL會使我成功屬性爲false。什麼地方出了錯 ?使用N1QL查詢Couchbase

let cluster = new Cluster() 
    let bucket = cluster.OpenBucket("mydoc","") 
    let query = """SELECT * FROM mydoc where SET = 'SET24MM2SCLV01'""" 
    let result = bucket.Query(query) 
    Console.WriteLine(result.Success) //would give false 
+0

您是否嘗試直接運行查詢,例如使用cbq?它成功了嗎?它是否返回錯誤信息? –

+0

BTW'SET'是N1QL中的關鍵字。試圖在查詢中使用它會返回語法錯誤。你的'mydoc'文件是否有'SET'屬性? –

+0

我正在從mongodb移植數據庫:)所以.. – himekami

回答

5

SET是N1QL中的reserved word。爲了使用它作爲一個標識符,您需要使用反引號,以逃避它,例如:

SELECT * FROM mydoc where `SET` = 'SET24MM2SCLV01' 

如果你沒有,你會得到一個語法錯誤:

"errors": [ 
    { 
     "code": 3000, 
     "msg": "syntax error - at SET" 
    } 
] 

你應該改變你查詢以

令查詢= 「」 「SELECT * FROM mydoc其中 SET = 'SET24MM2SCLV01'」 「」

let query = "SELECT * FROM mydoc where `SET` = 'SET24MM2SCLV01'" 

編輯

查詢結果also containsError屬性與查詢發生錯誤。如果Success返回false,應該始終檢查。如果查詢失敗,即使在轉義SET後,這也會解釋其他錯誤阻止查詢運行。

例如,我只注意到整個查詢用雙引號引起來。這會將字符串文字發送到服務器而不是查詢。

+0

我把密鑰名更改爲其他內容,但仍然無法運行查詢。順便說一句,我如何從「cbq」做到這一點? – himekami

+0

結果還包含一個'Error'屬性。檢查它看看實際的錯誤是什麼。 'cbq'是Couchbase的命令行工具。如果您無法使用它,只需使用任何必須執行查詢的工具,以便查看錯誤消息。不知道什麼是錯的,你無法修復它。 –

+0

@himekami更嚴重的問題 - 您將查詢放在引號中,將其轉換爲字符串文字而不是查詢。 –