MongoDB find方法


源數據

{
  "uuid" : 12700004,
  "card" : 981.3000000000029,
"weixin" : { "unionId" : "o1wS90l6kHDFXY2lAPDb9bPxRZxI1", "openId" : "o9zCJ1Aat93B0UjdlCFDAWmimBcEb", "nick" : "麥袋", "sex" : 1, "avatar" : "http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNcMa5gLGs9iaTYCmNqycSk5XUWzKDVfj6sPkk1Oia0YSy3SmMrcX3kxsvEu4UfiblckRo7CpM0xicKg/1321" }, "liaobe" : null, "mobile" : { "number" : "18874819762" }, "visitor" : null, "accountType" : 1, "mobileRewardReceived" : true }
MongoDB 查詢數據的語法格式如下:

db.collection.find(query, projection)
query :可選,使用查詢操作符指定查詢條件 projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)

一、查詢所有數據

顯示所有列

db["user"].find()                # MongoDB寫法
db["user"].find().pretty()       # 是find出的數據在命令行中更加美觀顯示,不至於太緊湊,同select * from user\G; 
select * from user;         

顯示指定列

db["user"].find({},{"liaobe":1,"mobile":1}).pretty()        # 如果projection不為空,不需要查詢條件時,必須鍵入{}    
# projection 指定哪些列顯示和不顯示 (0:不顯示 1:顯示)
select liaobe,mobile from user\G;              

查詢json數據二級數據

 "mobile" : { "number" : "18874819762" },

以上數據,要查詢number=18874819762的數據

db["user"].find({"mobile.number":"18874819762"}).pretty()       # 一級.二級.三級,依次類推

二、等於條件查詢

db["user"].find({"accountType" : 1}).pretty()   
select * from user where accountType=1\G;

三、and

db["user"].find({"uuid" : 12700004,"accountType" : 1,"authType" : 2}).pretty()       # 多個條件用, 隔開
select * from user where uuid=12700004 and accountType=1 and authType=2\G;       

 四、or

db["user"].find(
    {
        '$or':[
                {"mobile.number":"18874819762"},
                {"weixin.unionId":"o1wS90vp2ENW2Vu-QTnHlcrdU5kA"}
            ]
    },
    {"weixin.nick":1}
).pretty()

select nick from user where number='18874819762' or unionId='o1ws90vp2ENW2Vu-QTnH1crdU5kA'

五、< <= > >= (lt lte gt gte)

db["user"].find({'card':{$lt:5}}).pretty()                             # select * from user where card < 5\G;
db["user"].find({'card':{$gt:0,$lt:5}},{"card":1}).pretty()            # select card from user where card > 0 and card <5\G;
db["user"].find({'card':{$lte:5}},{"card":1}).pretty()                # select card from user where card <=5;\G;
db["user"].find({'card':{$gte:0,$lte:5}},{"card":1}).pretty()        # select card from user where card >=0 and card <=5\G;

六、使用in,not in (in,nin)

db["user"].find({"uuid":{$in:[83405282,25594661]}},{"uuid":1,"card":1}).pretty()        # select uuid,card from user where uuid in(83405282,25594661)\G;
db["user"].find({"authType":{$nin:[2,1]}},{"uuid":1,"card":1,"authType":1}).pretty()    # select uuid,card,authType from user where authType not in(2,1)\G;

七、匹配null

db["user"].find({"liaobe":null},{"uuid":1,"weixin.nick":1,"liaobe":1}).pretty()      # select uuid,nick,liaobe from user where liaobei is null\G;

八、like(MongoDB支持正則表達式)

db["user"].find({"weixin.nick":/^隨夢/},{"uuid":1,"weixin.nick":1}).pretty()       # select uuid,nick from user where nick like '隨夢%'\G;
db["user"].find({"weixin.nick":/袋$/},{"uuid":1,"weixin.nick":1}).pretty()         # select uuid,nick,from user where nick like '%袋'\G;

九、distinct去重

db["user"].distinct("weixin.nick",{"weixin.nick":/^隨夢/})       # select distinct(nick) from user where nick like "隨夢%";

十、count統計

db["user"].find({"card":{$lt:5}}).count()                      # select count(*) from user where card <5;
db.runCommand(    {       distinct: "user",       key: "weixin.nick",       query: { card: {"$lt":5}}    } ).values.length;           # 先通過find查出數據,然后去重,最后統計

十一、排序

在 MongoDB 中使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,並使用 1-1 來指定排序的方式,其中 1 為升序排列,而 -1 是用於降序排列。
db["user"].find({"card":{$gt:10,$lt:20}},{"uuid":1,"weixin.nick":1,"card":1}).sort({"card":1})        # select uuid,nick,card from user where card>10 and card<20 asc;
db["user"].find({"card":{$gt:10,$lt:20}},{"uuid":1,"weixin.nick":1,"card":1}).sort({"card":-1})          # select uuid,nick,card from user where card>10 and card<20 desc;

十二、limit 

如果你需要在MongoDB中讀取指定數量的數據記錄,可以使用MongoDB的Limit方法,limit()方法接受一個數字參數,該參數指定從MongoDB中讀取的記錄條數。
db["user"].find({"card":{$gt:10,$lt:20}},{"uuid":1,"weixin.nick":1,"card":1}).sort({"card":1}).limit(5)  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM