因為種種原因被逼著寫mongo……
作為一個初學者,我發現了幾個坑:
新的協議沒文檔
官網上只有Legacy Driver Implementation Documentation這箇舊的協議文檔,新的文檔的鏈接是一個死循環,繞一圈可以回到原地(不信你試試)。可能有用的只有一個視頻,還是2011年的,不想看了,哦草。這裡還有一個2013年的,從stackoverflow看來的。
當然官方給的各種語言的SDK里倒是一直在更新的。
但是給個文檔會死啊!
雖然是在用lua寫,所以本來也是作死。
但是給個文檔會死啊!
因為lua-resty-mongol沒有支持新協議,所以會有這麼個問題:
在update里使用$pull,lua-resty-mongol用getLastError取被修改的行數,永遠是返回1(這特么誰設計的),沒辦法知道改成功了沒有。只能update前後各find一次比較了哈哈哈哈哈哈。
設計太坑爹
除了之前的getLastError永遠返回1以外,還有一個問題:
之前是2.4.x版本,升級到3.x之後,告訴我admin庫需要升級,否則沒法登陸,而且需要用2.6.x版本來升級
呵呵
還有一個問題:
現在我有這麼個文檔post,每個記錄是這樣的:
1 2 3 4 5 6 7 8 |
{_id:"1", post_content:"123", comments:[ { uid:123, content:"haha"}, { uid:123, content:"hehe"}, { uid:456, content:"hoho"} ], } |
首先(只)取所有評論的話是沒有問題的↓:
1 |
db.post.find({_id:5},{comments:1, _id:0}) |
現在我想取出_id是5下的前15條評論
1 |
db.post.find({_id:5},{comments:{$slice:[0,15]}}) |
1 |
db.post.find({_id:5},{comments:{$slice:[0,15]}, _id:0}) |
這麼寫↑,_id沒了,其他post_content還在
1 |
db.post.find({_id:5},{comments:{$slice:[0,15]}, comments:1, _id:0}) |
↑並沒有什麼卵用
1 |
db.post.find({_id:5},{comments:{$slice:[0,15]}, _id:1}) |
↑這樣_id有,其他鍵沒了。
所以結果是_id必須留著……
沒錯我是強迫症,強迫症多著呢
從目前的我所遇到的情況來看,似乎mongodb能幹的奇妙功能用SQL資料庫一樣能搞,無非要再配合別的靠譜的nosql資料庫(比如redis這種)。至少寫了代碼還能預測能發生什麼。像mongo這樣寫著寫著給你個驚♂喜的實在受不了了。哦不過也有可能被虐著虐著就有感♂覺了呢(ง •̀_•́)ง
PS : 我是mongo初學者,歡迎大神來鞭撻我