2010-05-06 33 views
2

我有一個基於XML存儲在CouchDB數據庫中的文檔。CouchDB:訪問映射函數中的嵌套結構

某些鍵包含的命名空間,並在表格上「命名空間:關鍵」:

{"mykey": {"nested:key": "nested value"}} 

在地圖的功能,我想發出嵌套值作爲重點,但名稱中的冒號使它很難...

emit(doc.mykey.nested:key, doc) <-- will not work. 

有沒有人知道如何解決這個問題?

+0

既然你說你已經有了它存儲在數據庫中,我冒昧地清理了文檔示例的語法。乾杯! – JasonSmith 2010-05-07 07:15:57

回答

4

暗示它的所有隻是JSON和JavaScript給了我一些新的搜索想法。

這可能是在json鍵冒號無效,但我找到了一種方法。通過在文檔對象看作爲一個哈希,我可以通過以下方式獲得自己的價值:

Doc.mykey['nested:key'] 

它的工作原理 - 現在...

+1

使用點格式與下標格式之間沒有明顯的區別。所以這是處理它的正確方法。 'emit(doc.mykey [「nested:key」],doc)'很好! – JasonSmith 2010-05-07 07:13:50

0

這是因爲Couch是基於JSON的文檔數據庫,而doc.mykey.nested:key不是有效的JSON標識符。 JSON標識符必須與JavaScript標識符匹配,並且:不是有效的標識符字符。

所以,簡單的答案是:「不,這不會和不能工作」。你需要改變你的標識符。

其實,我應該有資格。

沙發可以使用幾乎任何它的意見等,理論上,與任何有效載荷。但開箱即用,它只是JavaScript和JSON。

+0

在www.json.org上閱讀時,我找不到任何關於有效標識符的信息。我發現的所有內容都是在名稱:值對中,名稱應該是一個字符串,並且一個字符串可以包含任何Unicode字符(但有些不包括冒號必須轉義)。你有沒有任何引用來批准你的陳述? – Vegar 2010-05-06 18:32:12