我想提出的問題是,mongodb既然是一個面向文檔的數據庫,而且它的存儲格式又是與json如此類似的bson。如此寬松的使用環境,那么為什么不把步子放更大一點,而對每個字段都要有類型約束呢。比如下面的數據結構{ 'field_1': 1, 'field_2': '1', 'field_3': true}在腳本語言里,這三個值是相等的,但mongodb可不這樣認為,如果你用string類型去尋找field_1的值,那么永遠找不到??墒窍裨趐hp這種弱類型語言里,本來就是string,int傻傻分不清楚,所以使用mongodb的php程序員經常會出現以下杯具場景,你存儲的時候主鍵是一個用函數生成的int型數字,但取出記錄的時候可能直接使用前端傳遞過來的GET參數,很不巧它只能是一個string類型,這樣你就永遠找不到這條記錄了。諸如此類的事情還很多,我在想既然mongodb不對數據結構做約束,為什么不干脆連數據類型也不做約束呢?因為既然不約束結構,那么程序中就無法對應出類型,這樣也不好做強制類型轉換之類的。你們有什么看法嗎?
2 回答

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
檢索效率是和存儲方式是永遠沒辦法規避的,三種類型的存儲字節長度決定了其查詢和計算的效率是不可能一致的,nosql再怎么優化也只是在策略層面,畢竟存儲層更多看的是介質本身的性能。

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
The Zen of Python 里面有兩句 (可以在python cli 中調用 import this 查看):
Explicit is better than implicit.
Simple is better than complex.
第一句可以解釋mongodb 的 的強類型
第二句可以解釋mongodb 的 schema-less
python 就是這樣的。動態語言,但是需要顯示的類型轉換。這是一種更嚴謹的工作方式。
用php 的 driver 的確會遇到這種問題,只能在查詢時手動處理了。
- 2 回答
- 0 關注
- 253 瀏覽
添加回答
舉報
0/150
提交
取消