您当前的位置: 首页 >  mongodb

Charge8

暂无认证

  • 3浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MongoDB文档常见查询

Charge8 发布时间:2021-04-25 15:42:08 ,浏览量:3

MongoDB官方文档:https://docs.mongodb.com/v4.2/reference/method/db.collection.find

一、文档查询操作 1、文档查询

在这里插入图片描述

语法格式如下: db.COLLECTION_NAME.find(query, projection).pretty() 参数说明:

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
  • pretty()是可选项。功能是格式化输出查询结果。
1.1 查询数据

(1)查询所有数据

> db.coll3.find()
{ "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
{ "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
{ "_id" : ObjectId("6084d6ecee8694c350d73909"), "name" : "猴子", "age" : 21, "sex" : 1 }
{ "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
{ "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16, "sex" : 0 }
{ "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }

(2)查询单个数据

语法格式如下: db.COLLECTION_NAME.findOne(query, projection)

  • 不加条件时,取出的是第一个数据。
> db.coll3.findOne()
{
        "_id" : ObjectId("6084d6ecee8694c350d73907"),
        "name" : "赵云",
        "age" : 18,
        "sex" : 1
}
> db.coll3.find({sex :0}).pretty()
{
        "_id" : ObjectId("6084d6ecee8694c350d7390a"),
        "name" : "露娜",
        "age" : 17,
        "sex" : 0
}
{
        "_id" : ObjectId("6084d6ecee8694c350d7390b"),
        "name" : "上官婉儿",
        "age" : 16,
        "sex" : 0
}

> db.coll3.findOne({sex :0})
{
        "_id" : ObjectId("6084d6ecee8694c350d7390a"),
        "name" : "露娜",
        "age" : 17,
        "sex" : 0
}
1.2 条件查询

常用的条件如下表

操作格式范例MySQL中类似语句等于{key, value}db.user.find({_id: 1})where id = 1小于{key, {$lt: value}db.user.find({age: {$lt: 18}})where age < 18小于等于{key, {$lte: value}}db.user.find({age: {$lte: 18}})where age 18大于等于{key, {$gte: value}}db.user.find({age: {$gte: 18}})where age >= 18不等于{key, {$ne: value}}db.user.find({age: {$ne: 18}})where age != 18包含{key, /value/}db.user.find(name: /赵/)where name like ‘%赵%’以…开头{key, /^value/}db.user.find(name: /^赵/)where name like ‘赵%’以…结尾{key, /value$/}db.user.find(name: /赵$/)where name like ‘%赵’在…之中{key, {$in: [value1, value2…]}}db.user.find(age: {$in: [1,2,3]})where age in (1,2,3)不在…之中{key, {$nin: [value1, value2…]}}db.user.find(age: {$nin: [1,2,3]})where age not in (1,2,3)为…类型{key: {$type: “string”}}db.user.find(age: {$type: ‘string’})无。查询用户集合中age是String类型的数据
  • 其中,/value/ 事实上是正则表达式查询。语法和JS中的正则一样。

(1)AND 条件 可以传入多个键(key),每个键(key)以逗号隔开,和常规 SQL 的 AND 条件一样。

语法格式如下: db.COLLECTION_NAME.find( {key1:value1, key2:value2} ).pretty()

> db.coll3.find({"name":"露娜", sex :0}).pretty()
{
        "_id" : ObjectId("6084d6ecee8694c350d7390a"),
        "name" : "露娜",
        "age" : 17,
        "sex" : 0
}

(2)OR 条件 OR 条件语句使用了关键字$or

语法格式如下: db.COLLECTION_NAME.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()

> db.coll3.find({"$or" : [{"age":17}, {"sex": 1}]})
{ "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
{ "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
{ "_id" : ObjectId("6084d6ecee8694c350d73909"), "name" : "猴子", "age" : 21, "sex" : 1 }
{ "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
{ "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }

(3)AND 和 OR 条件联合使用 AND 和 OR 联合使用,上面两者的结合。

语法格式如下: db.COLLECTION_NAME.find( { key1:value1, $or: [ {key1: value1}, {key2:value2} ] } ).pretty()

  • where sex=1 AND (age=18 OR age=19)
>  db.coll3.find({sex: 1, $or: [{age: 18}, {age: 19}]})
{ "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
{ "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }
  • where age db.coll3.find({"age" : {$lte : 20}, "$or" : [{"name":"孙尚香"}, {"sex": 0}]}) { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 } { "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16, "sex" : 0 } { "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }

    (4)模糊查询

    > db.coll3.find({"name":/赵/})
    { "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
    
    1.3 查询文档部分字段(投影查询)

    默认情况下,查询的结果是返回所有字段。只需要文档中的部分字段时,可以使用投影查询。

    语法格式如下: db.COLLECTION_NAME.find(query, projection).pretty()

    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。如果显示部分字段,指定这个参数即可。 _id默认是会被查询出来的,如果不想显示 _ id,可以使用_id: 0来隐藏该列
    > db.coll3.find({sex : 0}, {age:1, name:1})
    { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16 }
    
    > db.coll3.find({sex : 0}, {age:1, name:1, _id:0})
    { "name" : "露娜", "age" : 17 }
    { "name" : "上官婉儿", "age" : 16 }
    
    1.4 统计查询

    语法格式如下: db.COLLECTION_NAME.count(query, options)

    > db.coll3.find()
    { "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73909"), "name" : "猴子", "age" : 21, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16, "sex" : 0 }
    { "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }
    > db.coll3.count({"age":{$lt:20}})
    4
    > db.coll3.count({"age":{$lt:20}, "sex":0})
    2
    
    1.5 排序查询

    使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1(升序) 和 -1(降序)来指定排序的方式。

    语法格式如下: db.COLLECTION_NAME.find().sort({KEY:1})

    根据性别升序,年龄降序进行排序。

    > db.coll3.find({"age" : {$lte : 20}, "$or" : [{"name":"孙尚香"}, {"sex": 0}]}).sort({sex:1, age:-1})
    { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16, "sex" : 0 }
    { "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }
    
    1.6 分页查询
    • 使用 skip() 跳过指定数量的数据(参数默认是0),
    • 使用 limit() 读取指定数量的数据(参数默认是20), 二者可以单独使用,搭配起来就可以进行分页查询,公式为:(currentPage - 1) * pageSize, pageSize。使用逻辑和 MySql中的limit一样。

    limit()方法基本语法如下: db.COLLECTION_NAME.find().limit(NUMBER) skip() 方法基本语法如下: db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

    假设,每页显示 2个,即pageSize=2。

    > db.coll3.find()
    { "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73909"), "name" : "猴子", "age" : 21, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16, "sex" : 0 }
    { "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }
    #第一页
    > db.coll3.find().skip(0).limit(2);
    { "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
    #第二页
    > db.coll3.find().skip(2).limit(2);
    { "_id" : ObjectId("6084d6ecee8694c350d73909"), "name" : "猴子", "age" : 21, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
    
    #age倒序,取第二页
    > db.coll3.find().sort({"age":-1})
    { "_id" : ObjectId("6084d6ecee8694c350d73909"), "name" : "猴子", "age" : 21, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73908"), "name" : "赵紫", "age" : 20, "sex" : 1 }
    { "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390a"), "name" : "露娜", "age" : 17, "sex" : 0 }
    { "_id" : ObjectId("6084d6ecee8694c350d7390b"), "name" : "上官婉儿", "age" : 16, "sex" : 0 }
    > db.coll3.find().sort({"age":-1}).skip(2).limit(2)
    { "_id" : ObjectId("6084d748ee8694c350d7390c"), "name" : "孙尚香", "age" : 19, "sex" : 1 }
    { "_id" : ObjectId("6084d6ecee8694c350d73907"), "name" : "赵云", "age" : 18, "sex" : 1 }
    

    —— Stay Hungry, Stay Foolish. 求知若饥,虚心若愚。

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0551s