今天在排查bug的時候發(fā)現(xiàn)是mongodb的臟數(shù)據(jù)的問題捐康,下載了navicatformongo后發(fā)現(xiàn)sql語句并不起作用赏迟,搜了下原來mongodb的查詢語句和sql不同巴柿,將語法記錄下來侠坎,備用咒循。
轉(zhuǎn)載至https://www.cnblogs.com/wu-peng/p/8620136.html
左邊是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?mod5)?=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?isnull//?如果直接通過find({"username"?:?null})進行查詢,那么連帶"沒有username"的紀錄一并篩選出來??
db.users.find({"name"?:?/joey?/i})//?正則查詢必峰,value是符合PCRE的表達式??
db.food.find({fruit?:?{$all?:?["apple","banana"]}})//?對數(shù)組的查詢,?字段fruit中洪唐,既包含"apple",又包含"banana"的紀錄??
db.food.find({"fruit.2"?:"peach"})//?對數(shù)組的查詢,?字段fruit中,第3個(從0開始)元素是peach的紀錄??
db.food.find({"fruit"?:?{"$size"?:3}})//?對數(shù)組的查詢,?查詢數(shù)組元素個數(shù)是3的記錄吼蚁,$size前面無法和其他的操作符復(fù)合使用??
db.users.findOne(criteria,?{"comments"?:?{"$slice"?:10}})//?對數(shù)組的查詢凭需,只返回數(shù)組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}}}})//?嵌套查詢,僅當(dāng)嵌套的元素是數(shù)組時使用,??
db.foo.find({"$where"?:"this.x?+?this.y?==?10"})//?復(fù)雜的查詢旗国,$where當(dāng)然是非常方便的薪伏,但效率低下。對于復(fù)雜查詢粗仓,考慮的順序應(yīng)當(dāng)是?正則?->?MapReduce?->?$where??
db.foo.find({"$where"?:"function()?{?return?this.x?+?this.y?==?10;?}"})//?$where可以支持javascript函數(shù)作為查詢條件??
db.foo.find().sort({"x"?:1}).limit(1).skip(10);//?返回第(10,?11]條嫁怀,按"x"進行排序;?三個limit的順序是任意的,應(yīng)該盡量避免skip中使用large-number?