Mongodb查询语句与Sql语句对比
左邊是mongodb查詢語句,右邊是sql語句。對照著用,挺方便。
db.users.find() select?*?from?users
db.users.find({"age"?:?27}) select?*?from?users?where?age?=?27
db.users.find({"username"?:?"joe",?"age"?:?27}) select?*?from?users?where?"username"?=?"joe"?and?age?=?27
db.users.find({},?{"username"?:?1,?"email"?:?1}) select?username,?email?from?users
db.users.find({},?{"username"?:?1,?"_id"?:?0}) //?no?case??//?即時加上了列篩選,_id也會返回;必須顯式的阻止_id返回
db.users.find({"age"?:?{"$gte"?:?18,?"$lte"?:?30}}) select?*?from?users?where?age?>=18?and?age?<=?30 //?$lt(<)?$lte(<=)?$gt(>)?$gte(>=)
db.users.find({"username"?:?{"$ne"?:?"joe"}}) select?*?from?users?where?username?<>?"joe"
db.users.find({"ticket_no"?:?{"$in"?:?[725,?542,?390]}}) select?*?from?users?where?ticket_no?in?(725,?542,?390)
db.users.find({"ticket_no"?:?{"$nin"?:?[725,?542,?390]}}) select?*?from?users?where?ticket_no?not?in?(725,?542,?390)
db.users.find({"$or"?:?[{"ticket_no"?:?725},?{"winner"?:?true}]}) select?*?form?users?where?ticket_no?=?725?or?winner?=?true
db.users.find({"id_num"?:?{"$mod"?:?[5,?1]}}) select?*?from?users?where?(id_num?mod?5)?=?1
db.users.find({"$not":?{"age"?:?27}}) select?*?from?users?where?not?(age?=?27)
db.users.find({"username"?:?{"$in"?:?[null],?"$exists"?:?true}}) select?*?from?users?where?username?is?null //?如果直接通過find({"username"?:?null})進行查詢,那么連帶"沒有username"的紀錄一并篩選出來
db.users.find({"name"?:?/joey?/i}) //?正則查詢,value是符合PCRE的表達式
db.food.find({fruit?:?{$all?:?["apple",?"banana"]}}) //?對數組的查詢,?字段fruit中,既包含"apple",又包含"banana"的紀錄
db.food.find({"fruit.2"?:?"peach"}) //?對數組的查詢,?字段fruit中,第3個(從0開始)元素是peach的紀錄
db.food.find({"fruit"?:?{"$size"?:?3}}) //?對數組的查詢,?查詢數組元素個數是3的記錄,$size前面無法和其他的操作符復合使用
db.users.findOne(criteria,?{"comments"?:?{"$slice"?:?10}}) //?對數組的查詢,只返回數組comments中的前十條,還可以{"$slice"?:?-10},?{"$slice"?:?[23,?10]};?分別返回最后10條,和中間10條
db.people.find({"name.first"?:?"Joe",?"name.last"?:?"Schmoe"})??//?嵌套查詢
db.blog.find({"comments"?:?{"$elemMatch"?:?{"author"?:?"joe",?"score"?:?{"$gte"?:?5}}}}) //?嵌套查詢,僅當嵌套的元素是數組時使用,
db.foo.find({"$where"?:?"this.x?+?this.y?==?10"}) //?復雜的查詢,$where當然是非常方便的,但效率低下。對于復雜查詢,考慮的順序應當是?正則?->?MapReduce?->?$where
db.foo.find({"$where"?:?"function()?{?return?this.x?+?this.y?==?10;?}"}) //?$where可以支持javascript函數作為查詢條件
db.foo.find().sort({"x"?:?1}).limit(1).skip(10); //?返回第(10,?11]條,按"x"進行排序;?三個limit的順序是任意的,應該盡量避免skip中使用large-number
?
轉自:http://www.cnblogs.com/viviman/archive/2012/11/21/2780562.html
轉載于:https://www.cnblogs.com/Kuleft/p/5407491.html
總結
以上是生活随笔為你收集整理的Mongodb查询语句与Sql语句对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 研究发现AI在某些方面不如婴儿:很难监测
- 下一篇: dubbo源码分析(3)