• mongodb入门(二)


    前言

    上一节我们分享了使用 mongodb 完成一些基础的增删改查操作,这节将分享一些 mongo 的进阶操作。

    符合查询
    1. 查询记录数
      语法:db.getCollection(“user”).find({条件}).count();
    // 查询年龄为 18 的用户数量
    db.getCollection("user").find({"age":18}).count();
    
    • 1
    • 2

    在这里插入图片描述

    1. 限制返回的数据条数
    db.getCollection("user").find({}).limit(2);
    
    • 1

    在这里插入图片描述
    3. 排序 (值为-1表示倒序,为1表示正序)
    语法:db.getCollection(“集合名”).find().sort({“字段”:-1或者1});

    db.getCollection("user").find().sort({"age":-1});
    
    • 1

    在这里插入图片描述
    4. 数据去重
    语法:db.getCollection(“集合名”).distinct(“字段名”,{限制条件(可省略)});

    db.getCollection("user").distinct("age",{"age":{"$lt":90}});
    
    • 1

    在这里插入图片描述
    5. 多条件查询
    5.1 AND 操作
    AND 操作分为隐式AND操作(implicit AND operation)以及显示AND操作(explicit AND operation)
    隐式AND操作,如我们之前的多条件查询,各个条件之间就是 AND 关系

    // 查询年龄大于等于30且小于100的用户
    db.getCollection("user").find({"age":{"$gte":30,"$lt":100}});
    
    • 1
    • 2

    在这里插入图片描述

    显示AND操作,语法:db.getCollection(“集合名”).find({“$and”:[条件…]});

    db.getCollection("user").find(
        {
            "$and":
                [
                    {"age":{"$gte":30,"$lt":100}},
                    {"name":"钱七"}
                ]
        }
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    这里看到我们看到查询的条件越来越复杂,这里建议把我们的条件格式化以便于阅读。
    5.2 OR 操作
    语法:db.集合.fin(“$or”:[{条件}])
    当前集合数据如下
    在这里插入图片描述

    // 查询年龄小于30或者姓名为赵七的用户
    db.user.find(
        {"$or":
            [
                {"age":{"$lt":30}},
                {"name":"钱七"}
            ]
        }
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    显式AND操作和隐式AND操作可以混合使用 所有隐式AND操作都可以改写为显式AND操作。但有一些显式AND操作不能改写为隐式AND操作,例如两个 OR 条件之间是 AND 关系,看例子:

    // 先插入一条数据
    db.user.insertOne({"name":"韩梅梅","age":36,"sex":1,"sallary":9999});
    
    • 1
    • 2

    查询 (年龄大于等于20或者薪水小于10000) 并且 (性别是 0 或者姓名为 韩梅梅) 的用户信息

    db.user.find({
        "$and":[
            {
                "$or":
                    [
                        {"age":{"$gte":20}},
                        {"sallrary":{"$lt":10000}}
                    ]
            },
            {
                "$or":
                    [
                        {"sex":0},{"name":"李四"}
                    ]
            }
        ]
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    这条语句的逻辑相对就复杂了一些,描述信息的关键地方我都标红了,并且最外层的 and 关系的两个条件我也加了括号,便于理解各条件之间的关系。大家可以根据结果再理理他们之间的关系:
    在这里插入图片描述

    嵌入式文档

    所谓嵌入式文档,就是说插入数据的键值对的值本身又是一个json,看如下数据:

    db.user.insertMany(
        [
            {"name":"张三丰","age":110,"sallary":100000,"friend":{"name":"张翠山","age":45}},
            {"name":"张无忌","age":30,"sallary":30000,"friend":{"name":"赵敏","age":18,"sex":1}}
        ]
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这个数据集中,“friend”称为嵌入式文档(Embedded Document),“friend”下面的字段称为嵌套字段(Nested Field),如要查询嵌套字段,则需要使用点号来指定具体的字段名,格式如 嵌入式文档名.嵌套字段名,看如下例子:

    db.getCollection("user").find(
        {"friend.sex":1},
        {"friend.name":1,"friend.age":1}
    );
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    // 查询集合字段包含、不包含 某些元的数据
    
    // 查询 intersts 包含 play 的记录
    db.user.find({"intersts":"play"});
    // 查询 intersts 不包含 play 的记录
    db.user.find({"intersts":{"$ne":"play"}});
    // 查询 price 大于 170 小于等于 200 的记录
    db.user.find({"price":{"$gt":170,"$lte":200}});
    // 查询 intersts 数量 为 2 的记录
    db.user.find({"intersts":{"$size":2}});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    KaTeX parse error: Expected '}', got 'EOF' at end of input: …ateMany({条件},{"set":{更新的字段信息}});

    db.user.updateMany({"name":"韩梅梅"},{"$set":{"price":[100,180]}});
    db.user.updateMany({"name":"李雷"},{"$set":{"price":[200,250]}});
    
    • 1
    • 2

    mongodb 还支持根据记录里数组的索引查询数据:

    // 查询 intersts 里第一个元素是 play 的记录
    db.user.find({"intersts.0":"play"});
    // 查询 price 里第一个元素等于 100 的记录
    db.user.find({"price.0":{"$lte":100}});
    
    • 1
    • 2
    • 3
    • 4

    本节的内容就介绍到这里,下节我们来学习 mongodb 强大的聚合查询功能,我们下节见。

    由于本人也是处于学习阶段,所有内容是看过资料以后自己实验得出,如有不妥之处还望各位批评指正,在下感激不尽。

  • 相关阅读:
    Git 工作流程
    产品外观设计有哪些表面处理工艺
    Linux——文件传输协议知识点梳理
    【*E】leetcode-069.x的平方根
    用代谢组学的方式,探索斑马鱼胚胎绒毛膜对微塑料和纳米塑料的屏障功能及其对胚胎发育的影响
    Codeforces Round #814 (Div. 2)
    移动Web第四天 1 移动适配
    【licode】srtp链接问题
    springmvc-ssm整合
    Meta携手亚马逊共建PyTorch ,抵抗Tensorflow
  • 原文地址:https://blog.csdn.net/hxj413977035/article/details/126106184