mongoDB CRUD特性介绍

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文档删除

时间: 2024-10-31 02:55:51

mongoDB CRUD特性介绍的相关文章

**关于mysql5.7版本新特性介绍 ------数据类型 JSON**

关于mysql5.7版本新特性介绍 ------数据类型 JSON 测试环境: Win10.mysql 5.7.14 内容简介:随着mysql5.7版本的到来,大家对其的热情也越来越高涨,身为mysql圈子里的一员,我本身也对mysql5.7的一些新特性有所了解,通过学习了解到了很多新的特性,今天给大家介绍一下它在灵活性方面的一个新的功能:提供对JSON的支持 JSON介绍 首先介绍一下什么是JSON: > JSON(JavaScript Object Notation, JS 对象标记) 是一

Oracle10g安装升级以及新特性介绍

oracle 这部分内容是以前培训时写的课件,现在共享出来给大家参考.  Oracle10g安装与升级之一 这是以前培训时做的一个关于Oracle10g安装升级及新特性介绍的主题,现在拿出来给大家参考... Oracle10g安装与升级之二 关于Oracle10g安装升级及新特性介绍第二部分... Oracle10g安装与升级之三 关于Oracle10g安装升级及新特性介绍第三部分... Oracle10g安装与升级之四 关于Oracle10g安装升级及新特性介绍第四部分...

《Java数字图像处理:编程技巧与应用实践》——1.4 Swing Java 2D的其他高级特性介绍

1.4 Swing Java 2D的其他高级特性介绍 1 . Stroke接口 Stroke是Graphics2D的API接口,用来实现图形的描边修饰,在Java 2D中只有一个完成Stroke接口的类BasicStroke,如果有需要,可以自己完成Stroke接口,实现自定义的Stroke类.如何使用Stroke的实现类?方法如下: 1)调用Graphics2D 的setStroke()方法,传入一个实例化的Stroke对象. 2)调用draw()方法,传入要绘制的几何形状. BasicStr

Node.js 4.0 中的 ES 6 特性介绍

Node.js 4.0.0 已经发布了.这是和 io.js 合并之后的首个稳定版本,它带来了一系列的新特性,支持 ES 6的大部分特性.已经有很多 ES 6 的特性介绍了,这里我们介绍一下该怎么使用它们. 1. 模板字符串 如果你要在 JavaScript 中创建多行字符串,你可能会使用如下的语法: var message = [ 'The quick brown fox', 'jumps over', 'the lazy dog' ].join('\n'); 对于少量字符串这还算合适,但是如果

ES6中非常实用的新特性介绍_javascript技巧

ECMAScript 6离我们越来越近了,作为它最重要的方言,Javascript也即将迎来语法上的重大变革,InfoQ特开设"深入浅出ES6"专栏,来看一下ES6将给我们带来哪些新内容. 写在前面 ES6 已经提交给 Ecma 大会审查了,也就是说,我们将迎来一大波 javascript 的最新标准,还有一些语法糖.ES6 中有很多值得我们关注的东西,下面是我发现的一些我们最常用的一些新特性,进行记录一下. 1. for-of循环 这个东西用来循环数组很爽,原因呢,是因为它弥补了目前

久经考验的全栈云平台:Apsara Stack Enterprise 新特性介绍

摘要:本文的整理自2017云栖大会-南京峰会上阿里云专有云高级专家谢宁的分享讲义,讲义首先介绍了企业级云架构的发展趋势.政务云平台的特征.并介绍了阿里云专有云平台的产品全景图,并对于政务云的设计架构以及Apsara Stack Enterprise 的新特性进行了介绍. 在2017云栖大会-南京峰会上,阿里云专有云高级专家谢宁做了题为<Apsara Stack Enterprise 新特性介绍>的分享.在分享中谢宁分享了目前企业级云架构的发展趋势,目前新应用互联网化,传统核心应用开始逐渐改造,

PHP 7.0新增加的特性介绍

?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1;它相当于: <?PHP $a = isset($_GET['a']) ? $_GET['a'] : 1; 我们知道三元运算符是可以这样用的: $a ?: 1但是这是建立在 $a 已经定义了的前提上. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: <?php $a = iss

一起谈.NET技术,NHibernate 3.0.0.Alpha1 发布及新特性介绍

发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5平台,具体文件如下. NHibernate源码:NHibernate-3.0.0.Alpha1-src.zip NHibernate二进制文件:NHibernate-3.0.0.Alpha1-bin.zip 特性介绍 N

NHibernate 3.0.0.Alpha1 发布及新特性介绍

发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5平台,具体文件如下. NHibernate源码:NHibernate-3.0.0.Alpha1-src.zip NHibernate二进制文件:NHibernate-3.0.0.Alpha1-bin.zip 特性介绍 N