mongoDB CRUD特性介绍

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: mongoDB以类JSON的方式,即BSON来组织和封装数据,实现了非机构化数据的存储。

mongoDB以类JSON的方式,即BSON来组织和封装数据,实现了非机构化数据的存储。那对于其数据的查询,增删改,则由所谓的CRUD方法来实现,相当于关系型数据库的DQL,DML。CRUD特性基本上与SQL数据库的操作命令有很多相似的地方,也有一些差异。本文简要描述CRUD,便于快速认识及理解mongoDB的日常操作。

预备热身
Linux下快速安装MongoDB
Windows平台下安装MongoDB
mongoDB 启动与停止
mongo shell连接到mongoDB及shell提示符下执行js脚本
mongoDB简介及关键特性
SQL与mongoDB对比及映射

一、创建数据库

    //演示环境
    # cat /etc/redhat-release 
    CentOS release 6.7 (Final)

    # mongo --version
    MongoDB shell version: 3.0.12

    创建语法
            use database_name

    # mongo
    MongoDB shell version: 3.0.12
    connecting to: test
    > use tempdb         //如果数据库不存在,则创建数据库,否则切换到指定数据库
    switched to db tempdb

    > show dbs          //由于没有插入任何文档,因此无法查看到刚刚创建的数据库
    local  0.031GB

二、创建文档

  db.collection_name.insert(document)   //创建语法

    > db.users.insert({         //该命令将添加一个文件,同时创建集合users
    ... author:"Leshami",
    ... age:26,
    ... groups:["dba","operator"],
    ... blog:"http://blog.csdn.net/leshami"
    ... })
    WriteResult({ "nInserted" : 1 })

    > show dbs;                //再次查看数据库,可以看到tempdb已产生
    local   0.031GB
    tempdb  0.031GB

    > db.users.insert({      //再次新增一个文档
    ... author:"David",
    ... age:28,
    ... groups:["system","dev"],
    ... blog:"http://blog.csdn.net/david"
    ... })
    WriteResult({ "nInserted" : 1 })

三、查询文档

    db.collection_name.find()            //查看语法
    db.collection_name.find().pretty()   //查看语法,便于阅读的简易方式
    db.collection.find( <query filter>, <projection> )   //query filter为过滤条件,projection表示显示哪些列

    > db.users.find()    //如查看users集合,由于输出结果太长,此处查询结果省略
    > db.users.find({},{_id:0})  //使用_id:0方式过滤自动生产的_id列
    { "author" : "Leshami", "age" : 26, "groups" : [ "dba", "operator" ], "blog" : "http://blog.csdn.net/leshami" }
    { "author" : "David", "age" : 28, "groups" : [ "system", "dev" ], "blog" : "http://blog.csdn.net/david" }

    //使用pretty方式查看结果集
    > db.users.find().pretty()     
    {
            "_id" : ObjectId("57ecb2d9c3f3ec8e414b944c"),
            "author" : "Leshami",
            "age" : 26,
            "groups" : [
                    "dba",
                    "operator"
            ],
            "blog" : "http://blog.csdn.net/leshami"
    }
    {
            "_id" : ObjectId("57ecb3f9c3f3ec8e414b944d"),
            "author" : "David",
            "age" : 28,
            "groups" : [
                    "system",
                    "dev"
            ],
            "blog" : "http://blog.csdn.net/david"
    }

    //也可以使用输出到变量的方式,然后再printjson来输出结果集
    > var list=db.users.find().toArray(); 
    > printjson(list)
    [
            {
                    "_id" : ObjectId("57ecb2d9c3f3ec8e414b944c"),
                    "author" : "Leshami",
                    "age" : 26,
                    "groups" : [
                            "dba",
                            "operator"
                    ],
                    "blog" : "http://blog.csdn.net/leshami"
            },
            {
                    "_id" : ObjectId("57ecb3f9c3f3ec8e414b944d"),
                    "author" : "David",
                    "age" : 28,
                    "groups" : [
                            "system",
                            "dev"
                    ],
                    "blog" : "http://blog.csdn.net/david"
            }
    ]

    tempdb> db.actor.find()       //使用find方式查询文档
    { "_id" : ObjectId("57a188010662f146e0bc2a07"), "id" : 1, "name" : "robin", "age" : 25 }

    tempdb> db.actor.insert({id:2,name:"jerry",age:26})
    WriteResult({ "nInserted" : 1 })

    tempdb> db.actor.find()
    { "_id" : ObjectId("57a188010662f146e0bc2a07"), "id" : 1, "name" : "robin", "age" : 25 }
    { "_id" : ObjectId("57a188460662f146e0bc2a08"), "id" : 2, "name" : "jerry", "age" : 26 }

四、更新文档

    语法
    db.collection_name.update(
        <query>,
        <update>,
            {
              upsert: <boolean>,
              multi: <boolean>,
              writeConcern: <document>
            }
        )

    query  : update的过滤条件,类似sql update查询内where后面的。
    update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    writeConcern :可选,用于控制写入多少个节点后在向客户端应答,抛出异常等。

    //下面将Leshami的年龄从25修改到27
    > db.users.update(
    ... {author:"Leshami"},
    ... {$set:{age:27}}
    ... )
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    > db.users.find({age:27},{_id:0}).pretty()
    {
            "author" : "Leshami",
            "age" : 27,
            "groups" : [
                    "dba",
                    "operator"
            ],
            "blog" : "http://blog.csdn.net/leshami"
    }

五、删除文档

    语法
    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )

    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    writeConcern :可选,用于控制写入多少个节点后在向客户端应答,抛出异常等。

    > db.users.remove({age:28})          //删除年龄为28的文档
    WriteResult({ "nRemoved" : 1 })
    > db.users.find({age:28}).pretty()   //查看文档无返回记录
    > db.users.find().pretty()
    {
            "_id" : ObjectId("57ecb2d9c3f3ec8e414b944c"),
            "author" : "Leshami",
            "age" : 27,
            "groups" : [
                    "dba",
                    "operator"
            ],
            "blog" : "http://blog.csdn.net/leshami"
    }

六、小结

1、本文简要描述了mongoDB的CRUD的常规操作,并给出了示例演示
2、CRUD基本上等同于SQL数据库的增删改查
3、每一个操作都有更详细以及更丰富的用法,具体可参考官方文档

七、更多参考

mongoDB文档插入
mongoDB文档查询
mongoDB文档更新
mongoDB文档删除

DBA牛鹏社(SQL/NOSQL/LINUX)

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
存储 SQL NoSQL
MongoDB 6.0 新特性概览
正如发布MongoDB 5.0时承诺的更快发布频率,年度大版本MongoDB 6.0也于2022年正式跟广大数据库爱好者们见面了。目前阿里云MongoDB已经完成了对6.0版本的适配工作,大家可以直接在官网控制台进行购买和尝鲜体验!
MongoDB 6.0 新特性概览
|
2月前
|
NoSQL Java MongoDB
Springboot WebFlux项目结合mongodb进行crud
这篇文章介绍了如何使用Spring Boot WebFlux框架结合MongoDB进行基本的CRUD(创建、读取、更新、删除)操作,包括项目设置、实体类和Repository的创建、控制器的实现以及配置文件的编写。
54 0
Springboot WebFlux项目结合mongodb进行crud
|
3月前
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
35 6
|
4月前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
88 0
|
7月前
|
供应链 NoSQL 关系型数据库
MongoDB中的事务处理与ACID特性深度解析
【4月更文挑战第30天】MongoDB从4.0版开始支持多文档事务,以满足对数据一致性和可靠性的需求。本文深入探讨了MongoDB的事务处理机制及ACID特性:原子性保证操作全执行或全不执行;一致性确保事务前后数据库状态符合业务规则;隔离性通过MVCC和乐观锁防止并发影响;持久性借助Write Concern确保数据持久化。事务适用于金融交易等高一致性场景,但在使用时需评估业务需求和数据访问模式。
|
7月前
|
NoSQL MongoDB 数据库
MongoDB黑窗口操作(CRUD)
MongoDB黑窗口操作(CRUD)
|
7月前
|
NoSQL Java 关系型数据库
让 MongoDB 的 CRUD 有 JPA 的味道
让 MongoDB 的 CRUD 有 JPA 的味道
113 0
|
7月前
|
NoSQL 关系型数据库 MySQL
使用 MongoTemplate 对 MongoDB 进行 CRUD
使用 MongoTemplate 对 MongoDB 进行 CRUD
130 0
|
7月前
|
NoSQL JavaScript 前端开发
MongoDB【CRUD练习-条件查询-文档关系】
MongoDB【CRUD练习-条件查询-文档关系】
|
7月前
|
JSON NoSQL MongoDB
MongoDB【CRUD基本操作】
MongoDB【CRUD基本操作】