`
风雪涟漪
  • 浏览: 510648 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:9159
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:18621
社区版块
存档分类
最新评论

MongoDB快速指南

阅读更多

获取MongoDB数据库

请看这篇文章快速 体验MongoDB-windows版本 http://xiayuanfeng.iteye.com/blog/978729

连接数据库

这部分让我们通过MongoDB shell来操作数据库. (我们也可以使用各种语言的MongoDB的驱动.  shell是非常方便系统管理员操作的环境)

启动MongoDB Shell环境

# 'mongo' 是个可运行程序. 准确的路径地址,取决于你安装的目录。
$ bin/mongo

默认的是连接localhost上的test数据库

MongoDB shell version: <whatever>
url: test
connecting to: test
type "help" for help
>

"connecting to:" 告诉我们当前连接的数据库名称. 如果要切换数据库,输入:

> use mydb
switched to db mydb

要得知更多的命令,请输入help.

对于有其他数据库丰富经验的人员予以提示:
你可能注意到了,上述例子中,我们没有创建database或者collection,MongoDB不需要你这么做。当你插入了数据,MongoDB会自动创建database和collection。如果你查询一个不存在的collection,MongoDB会认为它是个空的collection。

使用use命令来切换database,并不会及时的创建database-当数据第一次插入到database中,MongoDB才开始创建database。也就是说如果你使用use命令切换一个不存在的database,这个database也不会出现在·show dbs· 的列表中。

向collection中插入数据

让我们创建一个测试的collection并向它插入数据. 我们将要创建两个对象, j 和t, 并且把它们保存在名称为things的collection中。

在下面的例子中, '>' 是shell的提示符。

> j = { name : "mongo" };{"name" : "mongo"}
> t = { x : 3 };{ "x" : 3  }> db.things.save(j);
> db.things.save(t);
> db.things.find();
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
>

需要注意的事项 :

  • 我们并没有提前定义好collection。MongoDB会在数据第一次插入的时候自动创建它。
  • 这个document可以存储任意的结构- 
  • 在这个例子中, 这两个document字段并不都一样,结构不同. 在实际应用中,
  • 一般来说在同一个collection中存储的documents结构都是相同的。
  • 然而,这种灵活性意味着schema迁移与扩展更为简单。 这样你就很少写那种alter table的脚本了。
  • 随着数据插入到database中, document对象都会在_id字段上赋予一个object ID(唯一值)。
  • 当你运行上面的列子object ID是不同的。

让我们添加更多的documents。

> for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});
> db.things.find();
{ "_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 }
has more

要注意的是,并不是所有的documents都显示了,当自动迭代一个游标(cursor)时候,

shell的限制数为20。除了我们已经添加的两个documents,实际我们看到的文档数为18个。

如果想要下一个结果集,输入it。结果如下

{ "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }
{ "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }
has more
> it
{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }

技术上来说,find()返回了一个cursor对象。但是在上个例子中,我们没有把cursor赋予一个变量,
因此shell自动迭代了这个cursor。给我们显示了一个最初的结果集并且可以输入it命令来查看后续的结果集。
但是我们可以直接操作cursor;下一部分我们详细讨论。

 

通过查询语句访问数据


在我们讨论查询语句之前,让我们讨论下一个怎样处理查询结果。也就是cursor对象。
我们会使用间的find()查询方法,这个方法会返回一个collection中所有的documents,
并且之后在讲解怎样创建一个具体的查询。
当使用mongo shell的时候,为了查看一个collection中所有的玄素,
我们需要直接使用find()操作返回的cursor对象。

让我们重复相同的查询,但是唯一不同的是使用cursor并且对它进行迭代了。

 

> var cursor = db.things.find();
> while (cursor.hasNext()) 
print json(cursor.next());
{ "_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 }

上面的例子现实了基于cursor风格的迭代过程。hasNext()方法可以得知是否还可以返回
更多的documents,并且next()方法返回了下一个的document。我们还使用了内置的
pringjson()方法来展示JSON风格的document。
当我们在javascript shell环境下,我们可以使用javascript的语言,
所以可以调用forEach来循环cursor。重复这个例子,但是使用forEach()方法来替代while循环。
> db.things.find().forEach(printjson);
{ "_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 }

这个例子中forEach()方法,我们必须第一个函数,这个函数用来调用cursor中每个document。
在mongo shell中,你可以把cursor当做一个数组:

 

> var cursor = db.things.find();
> printjson(cursor[4]);
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

当你这么使用cursor的时候,要注意的是当访问数据的同时,所有的数据都被写入
到RAM中了。这对于大数据集来说是不合适的,可能内存溢出。cursor应该用来迭代。
还要说的就是你可以把cursor转为一个真正的数组:
> var arr = db.things.find().toArray();
> arr[5];
{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }
要注意的是这种数组特性只适用于mongo shell环境,其他的驱动并不支持。
MongoDB cursor并不是一个快照(snapshots)-你的操作或者其他用户的操作在
第一次和最后一次调用你的cursor的next()方法,也许并不会返回结果。请使用锁来做一个快照式的查询。

 

返回特定的查询结果


现在我们知道怎样操作查询所返回的cursor对象了,接下来我们就关注下怎样返回
特定的查询结果。一般来说,先创建一个"query document",来和已有的documents进行匹配。
这部分举例要比解释更好。在下面的例子中,我们会给出SQL查询语句,并且举例
怎样通过mongo shell来获取和SQL相同的结果。

这些都是MongoDB查询的基础,也可以查看各个语言驱动的实现。

SELECT * FROM things WHERE name="mongo"
> db.things.find({name:"mongo"}).forEach(printjson);
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
SELECT * FROM things WHERE x=4
> db.things.find({x:4}).forEach(printjson);
{ "_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 }

这个查询表达式本身就是个document。一个查询document的格式{a:A,b:B,...}等同于SQL中的
"where a==A and b==B and ..."。更多的查询功能查看Queries and Cursors
MongoDB  也可以返回“部分documents”。这个documents只包含了部分字段。你可以使用find()
方法的第二字参数。

为了举例,让我们重复上一个例子find({x:4})并且加上了第二个参数来加以限制,只返回j字段。

SELECT j FROM things WHERE x=4
> db.things.find({x:4}, {j:true}).forEach(printjson);
{ "_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(color: #009100; backgroun

  


  
分享到:
评论

相关推荐

    MongoDB入门指南.pdf

    MongoDB入门指南 MongoDB是一种开源的文档类型数据库,它具有高性能、可扩展、高可用、自动收缩等特性。MongoDB能够避免传统的ORM映射,从而有助于开发。MongoDB中的每一行记录就是一个文档,它是一个由键值对构成...

    Mongo DB 权威指南(中文版)

    ### MongoDB权威指南(中文版)知识点总结 #### 一、MongoDB概述 1. **定义与特点**:MongoDB是一款开源的文档型数据库系统,它使用JSON格式的文档存储数据,支持动态模式,使得开发人员可以轻松地进行数据操作。...

    MongoDB安装指南

    下面是 MongoDB 安装指南,旨在帮助用户快速安装和使用 MongoDB。 一、安装 MongoDB MongoDB 安装非常简单,下面是安装步骤: 1. 首先,在公共服务器(192.168.0.9)下的“w/胡云生”目录下,下载 mongodb-linux...

    MongoDB入门指南

    《MongoDB入门指南》是一个快速入门MongoDB的教程,它以MongoDB的3.0版本进行说明。本教程安装的是MongoDB Windows 64位版本,目的只是为了让读者快速的入门MongoDB,快速理解和操作MongoDB。在开发或生产中强烈要求...

    大数据存储MongoDB实战指南1

    ### 大数据存储MongoDB实战指南1知识点概览 #### 一、MongoDB简介与特点 - **开源性**:MongoDB是一款开源的NoSQL数据库系统,具备高度灵活性和可扩展性。 - **高性能**:它能够高效地处理大规模数据,并提供快速的...

    MongoDB 权威指南(第二版)英文,带书签

    Kristina Chodorow是MongoDB公司的工程师,有着丰富的NoSQL数据库经验,她的这本权威指南通常被认为是学习MongoDB的权威资源。 从书籍内容来看,该书第一部分介绍了MongoDB的基本概念和入门知识。其中,提到MongoDB...

    mongoDB非关系型数据库安装以及使用指南

    MongoDB是一款流行且功能强大的非关系型数据库系统,它以其灵活的数据模型、高可用性和可扩展性而受到广泛...在学习过程中,参考“mongoDB安装及使用指南”这份资料,能帮助你更深入地理解和实践MongoDB的相关操作。

    MongoDB大数据处理权威指南

    ### MongoDB大数据处理权威指南 #### MongoDB简介 MongoDB是一种非关系型数据库系统,它使用JSON风格的数据存储方式(称为BSON格式),这使得数据存储更加灵活高效。MongoDB支持动态查询、索引、聚合等多种功能,...

    阿里云 专有云企业版 V3.12.0 云数据库 MongoDB 版 开发指南 20200702

    阿里云专有云企业版云数据库 MongoDB 版开发指南是阿里云提供的一份详细的开发指南,旨在帮助开发者快速熟悉云数据库 MongoDB 版的使用和开发。该指南涵盖了云数据库 MongoDB 版的法律声明、通用约定、API 参考、...

    阿里云 专有云企业版 V3.8.1 云数据库 MongoDB 版 运维指南 20190910

    阿里云专有云企业版V3.8.1云数据库MongoDB版运维指南20190910 阿里云专有云企业版V3.8.1云数据库MongoDB版运维指南是...运维团队可以通过阅读该指南,快速掌握MongoDB数据库的运维知识,提高数据库的可靠性和性能。

    主流NOSQL数据库之MongoDB快速入门.docx

    本文档通过详细介绍MongoDB的安装配置、基本操作以及高级功能,为初学者提供了一个全面了解MongoDB的快速入门指南。无论是对于开发者还是运维人员来说,掌握这些知识点都将有助于更好地利用MongoDB解决实际问题。

    mongodb快速入门

    ### MongoDB快速入门知识点详解 **一、MongoDB简介与启动** MongoDB是一种开源的NoSQL数据库,采用BSON(Binary JSON)格式存储数据,适用于处理大量非结构化或半结构化数据。它提供了高可用性、高扩展性和高性能...

    阿里云 专有云企业版 V3.6.0 云数据库MongoDB版 运维指南 - 20180824.pdf

    阿里云专有云企业版云数据库MongoDB版运维指南是阿里云企业版V3.6.0云数据库MongoDB版的运维指南,旨在帮助用户快速了解和使用云数据库MongoDB版的功能和特性。 1.法律声明:本文档中的所有内容,包括图片、架构...

    MongoDB中文指南

    这种数据模型使得MongoDB能够快速处理复杂的数据结构,如嵌套对象和数组。MongoDB支持丰富的查询语法,包括条件查询、范围查询以及正则表达式匹配。 二、安装与配置MongoDB 首先,你需要下载并安装MongoDB服务器。...

    ​MongoDB指南文档

    ### MongoDB指南文档知识点详解 #### 一、MongoDB基本概念 **SQL术语/概念 VS MongoDB术语/概念** | SQL术语/概念 | MongoDB术语/概念 | 解释/说明 | |---|---|---| | database | database | 数据库,用于存储一...

    mongodb资料,快速上手

    MongoDB 快速上手指南 MongoDB 是一个开源、高性能、无模式的文档型数据库,它的设计初衷是为了简化开发和方便扩展。 MongoDB 支持的数据结构非常松散,是一种类似于 JSON 的格式叫 BSON,所以它既可以存储比较...

    MongoDB 学习指南

    ### MongoDB学习指南 #### 一、MongoDB简介 MongoDB是一种非关系型的文档数据库,它采用BSON(Binary JSON)格式存储数据,能够提供高性能、高可用性和易扩展性。这种灵活性使得MongoDB成为处理大规模数据的理想...

Global site tag (gtag.js) - Google Analytics