zoukankan      html  css  js  c++  java
  • MongoDB(五):MongoDB操作文档

    MongoDB(四):MongoDB连接和创建数据库

    本篇文章中将讲解如何使用MongoDB操作文档。

    文档的数据结构和JSON基本一致,所有存储在集合中的数据都是BSON格式。BSON是一种类似json格式的一种二进制形式的存储格式,简称Binary JSON。

    一、插入文档

    MongoDB使用insert()或save()方法向集合中插入文档,语法如下:

    1
    db.COLLECTION_NAME.insert(document)

    例如:以下文档可以存储在MongoDB的test数据库的MongoDBTest集合中:

    1
    {"title" "MongoDB""description" "mongoDB是一个NoSql数据库""tags" "NoSql" }

    1、使用insert()方法插入文档

    在上面的例子中,MongoDBTest是我们的集合名,如果该集合不在该数据库中,MongoDB会自动创建该集合并插入文档。doc是定义的变量,可以以变量的形式插入集合。

    查看已经插入的文档:

    1
    2
    3
    4
    5
    > db.MongoDBTest.insert(doc)
    WriteResult({ "nInserted" : 1 })
    > db.MongoDBTest.find()
    "_id" : ObjectId("5a6f13e72d0b37669c5d2a78"), "title" "MongoDB""description" "mongoDB是一个NoSql数据库""tags" "NoSql" }
    >

    2、使用save()方法插入文档

    插入文档也可以使用save()方法。如果不知道_id字段save()方法类似于insert()方法。如果指定_id字段,则会更新该_id的数据。

    下面的例子表示使用save()命令更新数据:

    二、查询文档

    MongoDB查询文档使用find()方法。

    find()方法以非结构化的方式来显示所有文档。

    1、语法

    MongoDB查询数据的语法格式如下:

    1
    db.collection.find(query,projection)

    参数说明:

    query:可选参数,使用查询操作符指定查询条件。

    projection:可选参数,使用投影操作符指定返回的键。如果查询时要返回文档中所有键值,只需省略该参数即可(默认省略)。

    如果你需要格式化读取的数据,可以使用pretty()方法,语法格式如下:

    1
    db.collection.find().pretty()

    pretty()方法以格式化的方式来显示所有文档。

    2、实例

    例如:查询Student集合中的所有文档。

    除了find()方法之外,还有一个findOne()方法,它只返回一个文档。

    MongoDB与RDBMS where语句比较

    如果你熟悉常规的SQL数据,通过下表可以更好的理解MongoDB的条件语句查询:

    操作 格式 范例 RDBMS中的类似语句
    等于 {<key>:<value>} db.Student.find({"name":"张三"}).pretty() where name='张三'
    小于 {<key>:{$lt:<value>}} db.Student.find({"score":{$lt:"80"}}).pretty() where score<80
    小于或等于 {<key>:{$lte:<value>}} db.Student.find({"score":{$lte:"80"}}).pretty() where score<=80
    大于 {<key>:{$gt:<value>}} db.Student.find({"score":{$gt:"80"}}).pretty() where score>80
    大于或等于 {<key>:{$gte:<value>}} db.Student.find({"score":{$gte:"80"}}).pretty() where score>=80
    不等于 {<key>:{$ne:<value>}} db.Student.find({"score":{$ne:"80"}}).pretty() where score!=80

    (1)查询name是张三的学生

    1
    db.Student.find({"name":"张三"}).pretty()

    查询结果如下图所示:

    (2)查询成绩小于80的学生

    1
    db.Student.find({"score":{$lt:"80"}}).pretty()

    查询结果如下图所示:

    (3)查询成绩小于等于80的学生

    1
    db.Student.find({"score":{$lte:"80"}}).pretty()

    查询结果如下图所示:

    (4)查询成绩大于80分的学生

    1
    db.Student.find({"score":{$gt:"80"}}).pretty()

    (5)查询成绩大于等于80分的学生

    1
    db.Student.find({"score":{$gte:"80"}}).pretty()

    查询结果如下图所示:

    (6)查询成绩不等于80分的学生

    1
    db.Student.find({"score":{$ne:"80"}}).pretty()

    查询结果如下图所示:

    3、MongoDB AND条件查询

    MongoDB的find()方法可以传入多个键(key),每个键(key)以逗号分隔开,等价于常规SQL的AND条件。

    语法格式如下:

    1
    db.collection.find({key1:value1,key2:value2}).pretty()

    例如:查询姓名为张三并且课程是C#程序设计的学生信息。

    1
    db.Student.find({"name":"张三","subject":"C#程序设计"}).pretty()

    查询结果如下图所示:

    以上实例中类似于RDBMS中的where语句:WHERE name='张三' AND subject='C#程序设计'。

    4、MongoDB OR 条件查询

    MongoDB的OR条件语句使用了关键字$or,语法格式如下:

    1
    2
    3
    4
    5
    6
    7
    >db.collection.find(
      {
        $or:[
               {key1:value1},{key2:value2}
            ]
       }
    )

    例如:查询姓名是李四或者成绩等于80的学生

    1
    db.Student.find({$or:[{"name":"李四"},{"score":"80"}]}).pretty()

    查询结果如下图所示:

    三、更新文档

    MongoDB使用update()和save()方法来更新集合中的文档。接下来让我们详细来看下两个方法的应用及其区别。

    1、update()方法

    update()方法用于更新已经存在的文档。语法格式如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    db.collection.update(
      <query>,
      <update>,
     {
       upsert:<boolean>,
       multi:<boolean>,
       writeConcern:<document>
      }
    )

    参数说明:

    query:update的查询条件,类似sql update查询内where后面的条件。

    update:update的对象和一些更新的操作符(如$set,Sinc......)等,也可以理解为sql update查询内set后面的。

    upsert:可选参数,这个参数的意思是:如果不存在update的记录,是否插入新的文档。如果为true则插入,默认是false不插入。

    multi:可选参数,MongoDB默认是false,只更新找到的第一条记录。如果这个参数为true,就把按条件查询出来的多条记录全部更新。

    writeConcern:可选参数,抛出异常的级别。

    writeConcern的几种抛出异常的级别参数

    writeConcern.NONE:没有异常抛出。

    writeConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常抛出。

    writeConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。

    writeConcern.MAJORITY:抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。

    writeConcern.FSYNC_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。

    writeConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。

    writeConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。

    例如:使用update()方法更新标题(title)

    上面的语句只会更新第一条查询到的文档,如果你要更新多条相同的文档,则需要设置multi参数为true。

    如果要更新的数据不存在,upsert参数设置为true则会插入数据。

    2、save()方法

    save()方法通过传入的文档来替换已有文档,语法格式如下:

    1
    2
    3
    4
    5
    6
    db.collection.save(
      <document>,
      {
        writeConcern:<document>
      }
    )

    参数说明:

    document:要更新的文档数据。

    writeConcern:可选参数,抛出异常的级别。

    例如:更新_id=5a702a7f2c6ed8f4d3491831的文档。

     四、删除文档

    MongoDB使用remove()方法来移除集合中的数据。

    注意:在执行remove()方法前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

    remove()方法的基本语法格式如下:

    1
    2
    3
    4
    db.collection.remove(
      <query>,
      <justOne>
    )

    如果MongoDB是2.6版本以后的,语法格式如下:

    1
    2
    3
    4
    5
    6
    7
    db.collection.remove(
      <query>,
      {
        justOne:<boolean>,
        writeConcern:<document>
       }
    )

    参数说明:

    query:可选参数,删除文档的条件。

    justOne:可选参数,如果设为true或1,则只删除一个文档。

    writeConcern:可选参数,抛出异常的级别。

    实例

    1、删除title为MongoDB教程的文档,只删除一个:

    2、删除所有数据

    如果想删除所有数据,可以使用下面的例子

  • 相关阅读:
    将文件导入到SQL server数据库表中的字段中
    查看端口是否启用
    JS去除字符串左右两端的空格
    css常见问题
    iframe之局部刷新
    iframe局部刷新的二种实现方法
    模式识别复习目录
    linux下文件内容查找 转
    LaTeX技巧10:LaTeX数学公式输入初级入门
    matlab中高维数组怎么做PCA?
  • 原文地址:https://www.cnblogs.com/cxxtreasure/p/14197275.html
Copyright © 2011-2022 走看看