因为种种原因被逼着写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初学者,欢迎大神来鞭挞我