• 开始MongoDB开发之旅


           这篇教程介绍了使用 mongo shell进行基本的数据库操作。 mongo 是MongoDB发行版本的一部分,它为MongoDB提供了一个可对JavaScript语言和所有标准功能进行完全访问的完整的JavaScript环境以及一个完整的数据库接口。参见 mongo JavaScript API 文档和 mongo shell JavaScript Method Reference.

           这篇教程假设你在Linux或者OS X操作系统上运行MongoDB并且你有一个运行的数据库服务器;MongoDB也支持Windows并为Windows版本提供了一致的操作。如果你想要安装MongoDB并启动数据库服务器的指导请参见更详细的 安装 文档。

           本教程讨论MongoDB在以下几个方面使用:

    • 连接数据库
      • 连接mongod
      • 选择一个数据库
      • 显示mongo帮助
    • 创建一个集合并插入文档
      • 插入单个文档
      • 使用循环插入多个文档
    • 使用游标
      • 遍历游标进行循环操作
      • 使用游标进行数组操作
      • 查询指定的文档
      • 从集合中返回单个文档
      • 限制结果集中的文档数目
    • 下一步
        连接数据库

          本节你将连接到作为 mongod运行的数据库服务器,并且开始使用 mongo shell在数据库实例中选择一个逻辑数据库以及在 mongo shell中访问帮助文本。

         连接一个mongod

          从系统提示符中输入mongo命令启动 mongo, 如下:

       mongo
    

          默认情况下, mongo 会寻找在本地接口的 27017 端口监听的数据库服务器。想要连接运行于不同端口或接口的服务器,可以使用 --port  --host 选项.

         选择一个数据库

          启动 mongo shell后你的会话将会默认使用test数据库用于上下文。任何时侯在 mongo 中输入以下指令都会显示当前数据库:

       db
    

       db返回当前数据库的名称.

    1.  mongo shell中使用以下指令展示数据库列表:

      show dbs
      
    2. 使用以下命令切换到一个名为mydb的新的数据库:

      use mydb
      
    3. 使用 db操作指令确认你的会话使用了 mydb 数据库作为上下文, 它会返回当前数据库的名称:
         db

         这个时候如果你再次输入 show dbs操作指令, 结果将不会包含 mydb,因为如果你不插入数据到那个数据库当中,MongoDB将不会创建数据库。创建一个集合并插入文档这节描述了插入数据的过程。

          2.4版本的新特性: show databases 也会返回数据库列表.

         展示 mongo 帮助文本

          在任何时候你都可以在 mongo shell中使用以下操作来获取帮助文本:

       help
    

          除此之外,你可以将.help()追加到某些JavaScript方法、任何游标对象以及 db db.collection 对象来返回额外的帮助信息。

        创建一个集合并插入文档

          本节你将学会向mydb这个新的数据库中的things这个新的集合中插入文档

          MongoDB将会在第一次使用的时候隐式地创建集合和数据库: 在插入数据之前你不需要创建数据库或是集合。除此之外, 由于MongoDB使用动态模式 在将文档插入到集合之前你不需要指定文档的结构。

         插入单个文档 

    1. mongo shell中使用如下操作指令来确认当前上下文是 mydb 数据库:

      db
      
    2. 如果在前一个操作指令 mongo 没有返回 mydb , 使用如下操作指令来设置上下文为 mydb 数据库:

      use mydb
      
    3. 使用以下JavaScript操作序列来创建j  k这两个文档:

      j = { name : "mongo" }
      k = { x : 3 }
      
    4. 使用以下操作序列插入 j  k 这两个文档到集合 things 中:

      db.things.insert( j )
      db.things.insert( k )
      

      当插入第一个文档时,  mongod 会创建 mydb数据库和 things 集合。

    5. 使用以下操作确认things 集合存在:

      show collections
      

       mongo shell将返回当前(即 mydb) 数据库中的集合列表。在任何时候, 仅有的集合为 things。所有的 mongod 数据库还有一个 system.indexes 集合。

    6. 在 things集合上执行查询操作来确认文档存在于集合things中。类似以下这样在一个操作中使用 find() 方法:

      db.things.find()
      

      操作返回以下结果。 ObjectId 值将是唯一的:

      { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
      { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
      

      所有MongoDB 文档必须有一个拥有唯一值的 _id 字段。这些操作不会显示地为 _id 字段指定一个值, 所以 mongo 在将其插入集合之前为那个字段创建一个唯一的ObjectId 值 。

        使用循环插入多个文档

    1.  mongo shell中可以使用for循环添加多个文档到 things 集合中:

      for (var i = 1; i <= 20; i++) db.things.insert( { x : 4 , j : i } )
      
    2. 使用以下命令查询集合:

      db.things.find()
      

       mongo shell 展示集合中第一批20 个文档.  ObjectId 值是不一样的:

      { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
      { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
      { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
      { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
      { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
      { "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85a"), "x" : 4, "j" : 5 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85b"), "x" : 4, "j" : 6 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85c"), "x" : 4, "j" : 7 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85d"), "x" : 4, "j" : 8 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85f"), "x" : 4, "j" : 10 }
      { "_id" : ObjectId("4c220a42f3924d31102bd860"), "x" : 4, "j" : 11 }
      { "_id" : ObjectId("4c220a42f3924d31102bd861"), "x" : 4, "j" : 12 }
      { "_id" : ObjectId("4c220a42f3924d31102bd862"), "x" : 4, "j" : 13 }
      { "_id" : ObjectId("4c220a42f3924d31102bd863"), "x" : 4, "j" : 14 }
      { "_id" : ObjectId("4c220a42f3924d31102bd864"), "x" : 4, "j" : 15 }
      { "_id" : ObjectId("4c220a42f3924d31102bd865"), "x" : 4, "j" : 16 }
      { "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }
      { "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }
      
    1.  find() 返回一个游标. 在 mongo shell中使用it操作可以遍历游标并返回更多的文档。 mongo shell将会穷尽游标并返回以下文档:

      { "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
      { "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }
      

         想了解关于插入新文档的更多信息,参见 insert() 文档。

       使用游标

         当你查询一个集合时,MongoDB将返回包含查询结果的一个游标对象。然后 mongo shell遍历游标展示所有结果。shell遍历游标20次来展示最开始的20条结果,然后等待遍历剩下结果的请求,而不是一次性返回所有结果。 这可以防止 mongo 一次展示数千乃至数百万的结果。

          it操作允许你在shell中遍历后面的20个结果。在之前的步骤中, 游标仅包含另外的两个文档, 所以仅显示 另外的两个文档。

         本节的步骤展示使用游标的其它方式。想要更易于理解的关于游标的文档, 参见 遍历返回的游标.

        使用循环遍历游标

    1. 在MongoDB的JavaScript shell中, 查询things 集合并将产生的游标对象赋值给变量c:

      var c = db.things.find()
      
    2. 在变量c上使用while循环打印出所有的结果集:

      while ( c.hasNext() ) printjson( c.next() )
      

      如果游标有文档,hasNext() 函数返回true。next() 方法返回下一个文档。printjson()方法将文档渲染成类似 JSON的格式。

      操作的结果如下,  ObjectId 值唯一:

      { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
      { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
      { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
      { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
      { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
      { "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85a"), "x" : 4, "j" : 5 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85b"), "x" : 4, "j" : 6 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85c"), "x" : 4, "j" : 7 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85d"), "x" : 4, "j" : 8 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85f"), "x" : 4, "j" : 10 }
      { "_id" : ObjectId("4c220a42f3924d31102bd860"), "x" : 4, "j" : 11 }
      { "_id" : ObjectId("4c220a42f3924d31102bd861"), "x" : 4, "j" : 12 }
      { "_id" : ObjectId("4c220a42f3924d31102bd862"), "x" : 4, "j" : 13 }
      { "_id" : ObjectId("4c220a42f3924d31102bd863"), "x" : 4, "j" : 14 }
      { "_id" : ObjectId("4c220a42f3924d31102bd864"), "x" : 4, "j" : 15 }
      { "_id" : ObjectId("4c220a42f3924d31102bd865"), "x" : 4, "j" : 16 }
      { "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }
      { "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }
      { "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
      { "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }
      

         使用游标进行数组操作

           你可以把一个游标对象当做数组来操作。参考以下步骤:

           1. 在 mongo shell中, 查询things 集合并将产生的游标对象赋值给变量c:

               var c = db.things.find()

           2. 使用以下操作找到数组中索引为4的文档:

               printjson( c [ 4 ] )

               MongoDB返回以下结果:

              { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

               当你在游标中使用数组索引符号访问, mongo 首先调用 cursor.toArray() 方法并将游标返回的所有文档加载到 RAM中。然后索引就可用于产生的数组。这个操作完全地遍历游标并穷尽这个游标。

               对于非常大的结果集, mongo 可能会耗尽可用内存。

         想要了解更多游标信息,参见 遍历返回的游标.

        查询指定的文档

         MongoDB有一个很强大的查询系统,它允许你选择和过滤一个集合中的文档以及指定的字段和值。参见查询文档来了解MongoDB中所有的查询。

         在这个过程中, 通过传递一个“查询文档”作为参数到find() 方法中你可以查询things 集合 中指定的文档。一个查询文档指定了查询必须要匹配的条件来返回文档。

        按以下步骤查询指定文档:

    1.  mongo shell中, 通过给 find() 方法传递{ name : "mongo" }这个查询文档作为参数来查询所有name字段值为mongo的文档:

      db.things.find( { name : "mongo" } )
      

      MongoDB返回符合这个条件的一个文档.  ObjectId 值是不同的:

      { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
      
    2. 给 find()传递 { x : 4 }这个查询文档作为参数来查询所有x字段值为4的文档:

      db.things.find( { x : 4 } )
      

      MongoDB返回以下结果集:

      { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
      { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
      { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
      { "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85a"), "x" : 4, "j" : 5 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85b"), "x" : 4, "j" : 6 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85c"), "x" : 4, "j" : 7 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85d"), "x" : 4, "j" : 8 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85f"), "x" : 4, "j" : 10 }
      { "_id" : ObjectId("4c220a42f3924d31102bd860"), "x" : 4, "j" : 11 }
      { "_id" : ObjectId("4c220a42f3924d31102bd861"), "x" : 4, "j" : 12 }
      { "_id" : ObjectId("4c220a42f3924d31102bd862"), "x" : 4, "j" : 13 }
      { "_id" : ObjectId("4c220a42f3924d31102bd863"), "x" : 4, "j" : 14 }
      { "_id" : ObjectId("4c220a42f3924d31102bd864"), "x" : 4, "j" : 15 }
      { "_id" : ObjectId("4c220a42f3924d31102bd865"), "x" : 4, "j" : 16 }
      { "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }
      { "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }
      { "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
      { "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }
      

      ObjectId 值总是唯一的.

    3. 像前面一个查询一样查询所有x字段值为4的文档,但仅返回j的值。MongoDB也会返回 _id 字段值, 除非你显示地排除。你可以在 find()方法的第二个参数上添加 { j : 1 } 文档作为投影  。 操作类似以下这样:

      db.things.find( { x : 4 } , { j : 1 } )
      

      MongoDB 返回以下结果:

      { "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }
      { "_id" : ObjectId("4c220a42f3924d31102bd857"), "j" : 2 }
      { "_id" : ObjectId("4c220a42f3924d31102bd858"), "j" : 3 }
      { "_id" : ObjectId("4c220a42f3924d31102bd859"), "j" : 4 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85a"), "j" : 5 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85b"), "j" : 6 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85c"), "j" : 7 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85d"), "j" : 8 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85e"), "j" : 9 }
      { "_id" : ObjectId("4c220a42f3924d31102bd85f"), "j" : 10 }
      { "_id" : ObjectId("4c220a42f3924d31102bd860"), "j" : 11 }
      { "_id" : ObjectId("4c220a42f3924d31102bd861"), "j" : 12 }
      { "_id" : ObjectId("4c220a42f3924d31102bd862"), "j" : 13 }
      { "_id" : ObjectId("4c220a42f3924d31102bd863"), "j" : 14 }
      { "_id" : ObjectId("4c220a42f3924d31102bd864"), "j" : 15 }
      { "_id" : ObjectId("4c220a42f3924d31102bd865"), "j" : 16 }
      { "_id" : ObjectId("4c220a42f3924d31102bd866"), "j" : 17 }
      { "_id" : ObjectId("4c220a42f3924d31102bd867"), "j" : 18 }
      { "_id" : ObjectId("4c220a42f3924d31102bd868"), "j" : 19 }
      { "_id" : ObjectId("4c220a42f3924d31102bd869"), "j" : 20 }
      

         返回集合中的单个文档

          使用 db.collection.findOne() 方法你可以从MongoDB集合当中返回单个文档 。 findOne() 方法使用和 find()方法相同的参数, 但是返回一个文档而不是一个游标。

           想要检索things集合中的一个文档,使用以下命令:

        db.things.findOne()
    

           想要了解查询文档的更多信息,参见   读操作 文档.

          限制结果集中的文档数目

           通过限制你的应用程序必须通过网络获取的数据量,你可以限制结果集的数量来提升性能。

           想要指定结果集中文档的最大数量,在游标上调用 limit() 方法, 如下:

        db.things.find().limit(3)
    

          MongoDB将返回下面的拥有不同ObjectId 值的结果:

       { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
       { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
       { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
    
    下一步

    随着你对MongoDB进一步的学习,你会想要在数据库上操作文档的更多信息,可以参考以下资源:

    注:本文翻译自http://docs.mongodb.org/manual/tutorial/getting-started/#insert-individual-documents,敬请指正。








  • 相关阅读:
    Data Base Oracle 常用命令
    ASP.NET Core ASP.NET Core+MVC搭建及部署
    Hadoop 之 MapReduce 框架演变详解
    计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解
    Linux系统基本网络配置之ifconfig命令
    Linux-eth0 eth0:1 和eth0.1关系、ifconfig以及虚拟IP实现介绍
    Linux 中将用户添加到组的指令
    几种常见的Shell
    常见的Shell
    Linux(CentOS6.5)下创建新用户和组,并制定用户和组ID
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2998468.html
Copyright © 2020-2023  润新知