zoukankan      html  css  js  c++  java
  • mongoDB的文档查询

    1.简单查询:

      find() 方法以非结构化的方式来显示所有文档。

    语法

    MongoDB 查询数据的语法格式如下:      collection是集合名字,注意应该是当前数据库的集合,collection也可以换为getCollection('colle_name')

    db.collection.find(query, projection)
    • query :可选,使用查询操作符指定查询条件
    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

    >db.col.find().pretty()

         pretty() 方法以格式化的方式来显示所有文档。

    例子:

    (1)简单的查询所有:

    > db.colle1.find()
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 25 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 25 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

    (2)简单的查询单个:

    > db.colle1.findOne()
    {
            "_id" : ObjectId("5ab482095114c7b7fd6e83d9"),
            "name" : "qlq1",
            "age" : 25
    }

    注意:如果在DOS窗口需要美化查询结果可以加pretty()函数(此函数不能用于查询单个

    > db.colle1.find().pretty()
    {
            "_id" : ObjectId("5ab482095114c7b7fd6e83d9"),
            "name" : "qlq1",
            "age" : 25
    }
    {
            "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"),
            "name" : "qlq12",
            "age" : 25
    }
    {
            "_id" : ObjectId("5ab482105114c7b7fd6e83db"),
            "name" : "qlq13",
            "age" : 25
    }
    {
            "_id" : ObjectId("5ab482135114c7b7fd6e83dc"),
            "name" : "qlq14",
            "age" : 25
    }
    {
            "_id" : ObjectId("5ab482475114c7b7fd6e83dd"),
            "name" : "qlq15",
            "age" : 25
    }
    >

    2.按条件查询:

    数据:

    > db.colle1.find()
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

     

    (1)MongoDB 与 RDBMS Where 语句比较

    如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

    操作格式范例RDBMS中的类似语句
    等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
    小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
    小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
    大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
    大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
    不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

    例如:查询名字为qlq1的信息

    db.getCollection('colle1').findOne({name:'qlq1'})

    查询年龄大于25 的:

    db.getCollection('colle1').find({age:{$gte:25}})

    查询年龄大于25并且名字为qlq13的:  (AND条件查询)

    db.getCollection('colle1').find({age:{$gte:25},name:'qlq13'})

    (2)MongoDB AND 条件

    MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

    语法格式如下:

    >db.col.find({key1:value1, key2:value2}).pretty()

    例子:

    查询年龄大于25并且名字为qlq13的:  (AND条件查询)

    db.getCollection('colle1').find({age:{$gte:25},name:'qlq13'})

    (3)MongoDB OR 条件

    MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

    >db.col.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()

    例如:

    查询名字为qlq或者名字为qlq1的人的信息:

    db.getCollection('colle1').find({$or:[{name:'qlq1'},{name:'qlq13'}]})

    (4)AND 和 OR 联合使用

    例如:下面语句类似于关系型数据库的:

      where age=25 and (name='qlq1' or name='qlq13')

    db.getCollection('colle1').find({$or:[{name:'qlq1'},{name:'qlq13'}],age:25})

    (5)范围运算符查询:

    使用  "$in"  或者  "nin"判断是否在某个范围内

    例如:查询年龄在20,25范围内的信息。

    db.getCollection('colle1').find({age:{$in:[20,25]}})

    查询年龄不在20,25范围内的信息。

    db.getCollection('colle1').find({age:{$nin:[20,25]}})

    (6)正则表达式(类似于JS的功能

    •   使用//或者使用$regex编写正则表达式

    例如:查询name以qlq12开头的人的信息:

    db.getCollection('colle1').find({name:/^qlq12/})
    db.getCollection('colle1').find({name:{$regex:'^qlq12'}})

    (7)自定义查询:

    • 使用$where后面编写一个函数,返回满足条件的数据:

    例如:查询年龄大于等于25的学生:

    db.getCollection('colle1').find({$where:function(){return this.age>=25}})
    db.getCollection('colle1').find({$where:function(){return this.name.indexOf('qlq12')==0}})

      上面的mongodb的函数都是JS函数,因此可以参考JS函数即可完成各种查询。

    3.MongoDB Limit与Skip方法  用于分页查询

    数据:

    > db.colle1.find()
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

    MongoDB Limit() 方法    取几条

    如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

    语法

    limit()方法基本语法如下所示:

    >db.COLLECTION_NAME.find().limit(NUMBER)

    例如::取前两条数据

    > db.colle1.find().limit(2)
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }

    MongoDB Skip() 方法  跳过几条

    我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

    语法

    skip() 方法脚本语法格式如下:

    >db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

    例如:跳过两条取后三条

    > db.colle1.find().skip(2)
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

    两个结合实现分页:

    例如:每页2条,现在取第二页

    > db.colle1.find().skip(1*2).limit(2)
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }

    4.映射指定列:(投影筛选)   find方法的第二个参数

       选择一条数据的指定的列,而不需要全部的列。

    不写的活默认索引列出来

    > db.colle1.find({},{})
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

    或者:

    > db.colle1.find({},{name:1,_id:0,age:1})
    { "name" : "qlq1", "age" : 20 }
    { "name" : "qlq12", "age" : 25 }
    { "name" : "qlq13", "age" : 25 }
    { "name" : "qlq14", "age" : 50 }
    { "name" : "qlq15", "age" : 25 }
    >

    例如:只显示name列

    > db.colle1.find({},{name:1})
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1" }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12" }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13" }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14" }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15" }

    如果也不想ID列出来:

    > db.colle1.find({},{name:1,_id:0})
    { "name" : "qlq1" }
    { "name" : "qlq12" }
    { "name" : "qlq13" }
    { "name" : "qlq14" }
    { "name" : "qlq15" }
    >

     5.排序 sort()方法

    在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

    语法

    sort()方法基本语法如下所示:

    >db.COLLECTION_NAME.find().sort({KEY:1})

    例如:按年龄降序排序查询人的信息

    > db.getCollection('colle1').find({}).sort({age:-1})
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }

    例如:按年龄降序升序序查询人的信息

    > db.getCollection('colle1').find().sort({age:1})
    { "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
    { "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
    { "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
    { "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
    { "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }

       注意:

      skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

    6.统计个数:   count()方法

    • 语法:
    db.collection.find({条件}).count()

    或者

    db.collection.count({条件})
    • 例如:统计年龄大于25的员工人数

    第一种:

    > db.getCollection('colle1').count({age:{$gte:25}})
    4

    第二种:

    > db.getCollection('colle1').find({age:{$gte:25}}).count()
    4

    7.去除重复数据:  distinct()方法

      此方法返回去重字段在集合中一共有几种值

    • 语法:
    db.collection.distinct('去重字段',{条件})

    例如:

    > db.getCollection('colle1').distinct('age',{})
    [ 20, 25, 50 ]

    8.   $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

    MongoDB 中可以使用的类型如下表所示:

    类型数字备注
    Double 1  
    String 2  
    Object 3  
    Array 4  
    Binary data 5  
    Undefined 6 已废弃。
    Object id 7  
    Boolean 8  
    Date 9  
    Null 10  
    Regular Expression 11  
    JavaScript 13  
    Symbol 14  
    JavaScript (with scope) 15  
    32-bit integer 16  
    Timestamp 17  
    64-bit integer 18  
    Min key 255 Query with -1.
    Max key

    例如:

    数据:

    > db.exam.find()
    { "_id" : ObjectId("5ab8ae0d807bacd3133efcf6"), "name" : "qlq", "age" : 25 }
    { "_id" : ObjectId("5ab8ae13807bacd3133efcf7"), "name" : "qlq", "age" : true }

    现在查询age的类型是boolean类型的数据:

    > db.getCollection('exam').find({"age":{$type : 8}})
    { "_id" : ObjectId("5ab8ae13807bacd3133efcf7"), "name" : "qlq", "age" : true }
  • 相关阅读:
    [NOIP2015] D1T2 信息传递
    Codeforces #447 Div.2 Tutorial
    python进阶
    Vue入门
    python基础
    python介绍
    React笔记_(3)_react语法2
    React笔记_(2)_react语法1
    React笔记_(1)_react概述
    webpack笔记_(3)_First_Project
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8637973.html
Copyright © 2011-2022 走看看