MongoDB【CRUD练习-条件查询-文档关系】

这篇具有很好参考价值的文章主要介绍了MongoDB【CRUD练习-条件查询-文档关系】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

练习1-CRUD

// 进入test数据库
use test;
// 查询文档内容
db.students.find();
// 显示当前数据库中所有集合
show collections;
// 向数据库的user集合中插入一个文档
db.users.insertOne(
    {username: "lyh"}
);
// 查看当前数据库中所有的集合 发现users集合被创建
show collections;
// 查看users集合中所有文档
db.users.find();
// 向users集合中插入一个文档
db.users.insertOne(
    {username: "sxau"}
);
// 查看users集合中所有文档
db.users.find();
// 统计users集合中文档的数量
db.users.find().count();
// 查询集合users中username为lyh的文档
db.users.find({username: "lyh"});
// 向users集合中username为lyh的文档添加一个address属性,属性值为shanxi
db.users.updateOne(
    {username: "lyh"},
    {$set:
        {address: "shanxi"}
    }
);
// 使用 {username:"lj"} 替换 username 为 sxau 的文档
db.users.replaceOne(
    {username: "sxau"},
    {username: "lj"}
);

// 删除username为lyh的address属性
db.users.updateOne(
    {username: "lyh"},
    {
    $unset: {address: 404}
    }
);

// 向username为lyh的文档中添加一个hobby属性:{cities["chengdu","xian"],sport:["basketball","football"]}
// mongdb文档(document)的属性值也可以是一个文档,当一个文档的属性值是一个文档的时候,我们称这个文档叫做内嵌文档
// 比如下面我们的这个文档中又存放了一个名为hobby的文档,它有两个属性:cities和sport
db.users.updateOne(
    {username: "lyh"},
    {
    $set: {
        hobby:{
            cities:["chengdu","xian"],
            sports:["basketball","football"]
            }
        }
    }
);

// 向username为lj的文档中添加一个hobby属性:{sport:["basketball","sing"]}
db.users.updateOne(
    {username: "lj"},
    {
        $set: {
            hobby: {
                sport:["basketball","sing"]
            }
        }
    }
);

// 查询 喜欢basketball 运动的文档
// MongDB 支持对内嵌文档进行查询 查询的时候属性名必须加引号 单引号和双引号都行
db.users.find(
    {"hobby.sport":"basketball"}
);

// 向lj的sport的中添加一个"pingpang"
// 这里用 $push 而不是 $set push是向数组中添加一个新的元素
// push 可以给数组添加重复的元素 但是下面的set不会
db.users.updateOne(
    {username: "lj"},
    {
        $push:{
            "hobby.sport": "pingpang"
        }
    }
);

db.users.find();

// 除了 $push 还可以用 $addToSet 表示添加到集合 和push的区别就是
// addToSet 会把我们的数组当做一个set集合来看待 它不可以添加重复的元素
db.users.updateOne(
    {username: "lj"},
    {
        $addToSet:{
            "hobby.sport": "pingpang"
        }
    }
);

// 删除喜欢 sing 的用户
db.users.deleteOne(
    {"hobby.sport": "sing"}
);

练习2-条件查询

  • 这里会学习到一个数据类型:数组,这里的语法和JavaScript十分相似。数组使用push来添加数据。
  • 这里还会学到比较运算符:小于:lt ,等于:eq,大于: gt,小于等于: lte,大于等于: gte。和我们shell编程的比较运算符很像。
// 向 numbers 插入20000条数据 耗时十几秒
for(var i=1;i<=20000;i++){
    db.numbers.insertOne(
        {num:i}
    );
};

db.numbers.find();

// 删除只需要0.2s
db.numbers.drop();

// 使用数组存储2w条数据 只调用一次insert方法
var arr = [];

for(var i=1;i<=20000;i++){
    arr.push({num: i});
};
// 这次只用了 1s
db.numbers.insertMany(arr); //插入数组需要使用insertMany而不是insertOne 后者会插入2w个列族

db.numbers.find();

// 查询numbers中num为500的文档
db.numbers.find(
    {num: 500}
);
// 查询numbers中num大于18888的文档
db.numbers.find(
    {
        num: {$gt: 18888}
    }
);
// 查询numbers中num小于等于30的文档
db.numbers.find(
    {num:{$lte: 30}}
);
// 查询numbers集合中num等于77的文档
db.numbers.find(
    {num:{$eq: 77}}
);
// 查询numbers中num大于50小于70的文档
db.numbers.find(
    {num:{$gt:50,$lt: 70}}
);
// 查询numbers中的前10条文档
db.numbers.find().limit(10);
// 实际开发过程中我们不可能使用没有查询条件的查询 加载时间长 我们都是分页加载的 而且即使不考虑服务器的性能 还有网速的影响 而且用户也看不完那么多数据 用户的内存也存不了
db.numbers.find();
// 查询numbers中的第10条到第20条文档
// skip() 用于跳过指定数量的数据
db.numbers.find().skip(10).limit(10);
// 查询numbers中的第21条到第30条文档
db.numbers.find().skip(20).limit(10);
// mongdb 会自动调整我们 limit和skip方法的顺序 下面的语句执行时其实还是 db.numbers.find().skip(20).limit(10);
db.numbers.find().limit(10).skip(20);

文档之间的关系

文档之间有三种:

  • 一对一
    • 夫妻
  • 一对多/多对一
    • 文章和评论
  • 多对多
    • 老师和学生

这些都可以通过内嵌文档来映射。

一对一

// 李元芳是狄如燕的丈夫 注意:插入多个文档或者一个数组时需要使用insertMany
db.wifeAndHusband.insertMany(
    [
        {name: "狄如燕",
        husband:{
            name: "李元芳"}
        },{
        name: "红太狼",
        husband:{
            name: "灰太狼"
        }
        }
    ]
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb

一对多

//一对多 一篇文章对多个评论
db.article.insertOne(
    {
        name: "《沉默的大多数》",
        comments: [
        "很好看",
        "给王小波点赞",
        "神作"
        ]
    }
);

db.article.find();

// 增加字段 'author' 并赋值为 '王小波' 给所有含有 'name' 属性的文档
db.article.updateMany(
    {name: {$exists: true}},
    {
        $set: {
            author: "王小波"
        }
    }
);
db.article.insertOne(
    {
        name: "《祈念守护人》",
        author: "东野圭吾",
        'comments': [
            "很治愈",
            "好看",
            "力推"
        ]
    }
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb
如果非要严格的说相同的评论内容可以对应多个作者的话,也可以算是多对多。

多对多

// 多对多
db.teachers.insertMany([
    {name: "狄仁杰"},
    {name: "曾泰"},
    {name: "李元芳"}
]);

db.students.insertMany(
    {name: "狄春",age: 22,isDel: 0,gender: "男"},{name: "狄如燕",age: 20,isDel: 0,gender: "女"}
);

//添加字段 teacher_ids 与teachers 产生关联
db.students.updateOne(
    {name: "狄春"},
    {$set:{
        teacher_ids:[
           ObjectId("64e17b707867901a96e5f81e"),
           ObjectId("64e17b707867901a96e5f820")
        ]
        }
    }
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb

练习3-条件查询

  • 这里我们会学到一个新的关键字:$inc 是自增的意思,需要指定增加的值。

数据源:dept(部门表),emp(员工表)

b.dept.insertMany([
    {deptno: 1001,dname: "财务部",loc: "北京"},
    {deptno: 1002,dname: "办公室",loc: "上海"},
    {deptno: 1003,dname: "销售部",loc: "成都"},
    {deptno: 1004,dname: "运营部",loc: "西安"}
]);


db.emp.insertMany([
    {empno: 7001,ename: "光头强",job: "伐木工",depno: 1004,sal: 800},
    {empno: 7001,ename: "熊大",job: "护林员",depno: 1004,sal: 100},
    {empno: 7001,ename: "熊二",job: "护林员",depno: 1004,sal: 500},
    {empno: 7001,ename: "吉吉",job: "老板",depno: 1001,sal: 7000},
    {empno: 7001,ename: "毛毛",job: "会计",depno: 1002,sal: 2000},
    {empno: 7001,ename: "二狗",job: "保安",depno: 1003,sal: 1000},
    {empno: 7001,ename: "大马猴",job: "保安",depno: 1003,sal: 1000}
]);
  • 工资小于1100
db.emp.find(
    {sal: {$lt: 1100}}
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb

  • 工资在500-1000
db.emp.find(
    {sal: {$gt: 500,$lt: 1000}}
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb

  • 工资小于1000或者大于2000
db.emp.find(
    {
    $or:[
        {sal: {$lt: 1000}},
        {sal: {$gt: 2000}}
    ]
    }
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb

  • 查询运营部所有员工
// 查询运营部所有员工
var depno = db.dept.findOne(
    {dname: "运营部"}
).deptno;
db.emp.find(
    {depno: depno}
);

MongoDB【CRUD练习-条件查询-文档关系】,HBase,数据库,mongodb

  • 给所有工资低于1000的员工增加500元工资
// 给所有工资低于1000的员工增加500元工资
db.emp.updateMany(
    {sal: {$lte: 1000}},
    {
        $inc:{
                sal: 500
            }
    }
);

这里使用了一个新的关键字:inc 代表 increase:自增的意思,如果我们要做减法的话,可以令增加的值为负数。文章来源地址https://www.toymoban.com/news/detail-668222.html

sort和投影

  • sort 是默认按照 _id 进行排序的,可以根据设置指定的字段来排序,需要以对象的格式来设置参数(中括号{字段名: 1},1代表升序,-1代表降序)。
  • 投影的是设置查询结果中显示的字段,需要设置find()中的参数,同样是对象的格式(中括号{自字段名:1},1代表显示,0代表不显示),其中,_id 默认是显示的。
//默认按照 _id 来进行排序
db.emp.find();

// 按照工资来升序排序 sort()需要一个对象来指定排序规则 1: 升序 -1: 降序
db.emp.find().sort({sal:1});

// 先按照工资来排序,如果工资相同则按照empno排序
// limit skip 和 sort 都可以以任意顺序调用
db.emp.find().sort({sal:1,empno:-1});

// 指定查询结果字段 也就是find的第二个参数 是一个对象 1代表显示 0代表不显示 _id默认显示
db.emp.find({},{ename: 1,_id: 0});

到了这里,关于MongoDB【CRUD练习-条件查询-文档关系】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MongoDB - 构造复杂查询条件执行查询

    1. 构造 keyword 的查询条件 2. 构造 threatSubType 的查询条件 3. 相应的实体类

    2024年02月11日
    浏览(32)
  • 【数据库MongoDB】MongoDB与大数据关系以及MongoDB中重要的进程:mongod进程与mongo进程关系

    云计算的定义有多种说法,对于到底什么是云计算,我们至少可以找到100种解释。目前广为接受的是美国国家标准与技术研究院定义: 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器

    2024年02月02日
    浏览(70)
  • Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

    MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。想查看官网相关内容的化我这里提供了官网地址:https://baomidou.com/ 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般

    2024年02月04日
    浏览(71)
  • 关系型非关系型数据库区别,以MongoDB为例在express中连接MongoDB示例

    目录 关系型数据库 关系型数据库常见的类型有: 关系型数据库的优点包括: 非关系型数据库 非关系型数据库常见的类型有: 非关系型数据库的特点包括: 关系型数据库和非关系型数据库区别 MongoDB是什么 MongoDB优势: 在Express中连接MongoDB步骤 Schema 关系型数据库是以关系模

    2024年01月16日
    浏览(77)
  • 3、HBase的java API基本操作(创建、删除表以及对数据的添加、删除、查询以及多条件查询)

    1、hbase-2.1.0介绍及分布式集群部署、HA集群部署、验证、硬件配置推荐 2、hbase-2.1.0 shell基本操作详解 3、HBase的java API基本操作(创建、删除表以及对数据的添加、删除、查询以及多条件查询) 4、HBase使用(namespace、数据分区、rowkey设计、原生api访问hbase) 5、Apache Phoenix(5.0.0-5.

    2024年02月08日
    浏览(65)
  • mongoDB非关系型数据库学习记录

    MongoDB是一个 基于分布式文件存储的数据库 ,官方地址https://www.mongodb.com/ 数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序 数据库的主要作用就是管理数据,对数据进行增©、删(d)、改(u)、查® 相比于纯文件管理数据,数据库管理数据有如下特点: 速度更快 扩展

    2024年02月04日
    浏览(45)
  • ElasticSearch学习简单使用(索引、文档、分页查询、多条件查询)

    APIfox接口在线文档 安装连接 下载链接(各个系统,也包括docker) 打开 我下载的时window版本,直接就是zip压缩包解压后直接使用 执行bin目录下的这个bat文件,就会自动打开终端运行了。 大部分使用http请求进行学习。 你需要一个接口工具,postman,APIfox,或者一些浏览器插件

    2024年02月03日
    浏览(46)
  • 【MongoDB】高性能非关系型数据库

    MongoDB是一个开源的、面向文档的NoSQL数据库管理系统。它采用了类似JSON的BSON(二进制JSON)数据模型,具有高度灵活性和可扩展性,被广泛应用于大规模数据存储和实时分析等场景。 以下是关于MongoDB的详细解释: 文档导向:MongoDB是一种文档数据库,数据以文档的形式存储在

    2024年02月13日
    浏览(56)
  • Mongodb 对嵌套文档数组进行查询操作

    非嵌套文档的数组,数组由数字、字符串等元素组成。 以下方法对数组字段进行查询操作的示例,包括对数组匹配查询,元素的增、删、改操作,空数组、非空数组查询等。 连接到 mongodb 数据库, 创建集合 user, 批量插入如下测试数据 : 在指定数组上的使用相等条件,请

    2024年02月17日
    浏览(43)
  • 整理mongodb文档:find方法查询数据

    整理mongodb文档:find方法查询数据 求关注,求批评,求指出,如果哪儿不清晰,请指出来,谢谢 如题,本文讲的是如何用find查询数据,如何在数组、字段、对象中查询,以及‘或’等查询操作,最后讲了一些参数。依旧是在shell下操作。 查询数据是db操作中很重要的一步,而

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包