返回目录

1、集合操作

1.1、创建集合

MongoDB 用 db.createCollection(name, options) 方法创建集合。

格式

db.createCollection(name, options)

其中,name 是集合名称,是一个字符串;options 是可选项,是一个文档,指定内存大小和索引等选项,具体参数说明如下表:

字段 类型 说明
capped 布尔         (可选)如果为 true,表示为固定集合。固定集合是指具有固定存储空间的集合。
当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如果为 true,在 _id 字段自动创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值(以字节计)。
如果 capped 为 true,也需要指定该字段。
max 数值 (可选)为固定集合指定文档的最大数量。

注:1.如果 collection 达到最大存储限制(size)之前达到最大文档数量(max)会删除旧文档。

2.MongoDB 会先检查size值,然后再检查max值

范例

创建一个集合"user",为字段_id创建索引,最大存储空间是10M,最大文档数量为1000

>db.createCollection("user", { capped : true, autoIndexId : true, size : 10485760, max : 1000 } )
{ "ok" : 1 }
>

说明

在 MongoDB 中,可以不用createCollection()方法创建集合,是因为在插入文档的时候,会自动创建集合

>db.myCollection.insert({"name" : "liruihuan"})
WriteResult({ "nInserted" : 1 })
>show collections
myCollection
user
>

其中,show collections 表示显示当前操作数据库内的所有集合。

1.2、删除集合

MongoDB 用 db.collection.drop() 删除集合

格式

db.COLLECTION_NAME.drop()

如果删除成功返回true,否则,返回false

范例

删除刚才创建的myCollection集合,并显示删除后的集合列表,验证是否删除成功

>db.myCollection.drop()
true
>show collections
user
>

2、文档操作

2.1、插入文档

MongoDB 用 insert()或者save()向集合中插入文档

格式

db.collection.insert(document)

范例

我们向集合"user"中插入{"name":"user1","age":19}文档,插入之前先查询集合"user"中存在的文档,然后再查询插入以后的所有文档,以便确定是否插入成功

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 } > db.user.insert({"name":"user1","age":19})
WriteResult({ "nInserted" : 1 }) # 插入一条数据 > db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754c"), "name" : "user1", "age" : 19 }
>

文档查询用 find() 方法,下一篇会具体讲解。

插入文档也可以使用 db.collection.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。save() 方法会在下面 更新文档 里面用范例说明。

2.2、更新文档

MongoDB 用 update() 或者 save() 更新集合中的文档

2.2.1、update() 

update() 更新已经存在文档的值

格式

db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)

范例

在集合"user"中,将文档原来的name值"user1"更新为"user2",更新之前先查询集合"user"中存在的文档,然后再查询更新以后的所有文档,以便确定是否更新成功

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754c"), "name" : "user1", "age" : 19 } >db.user.update({'name':'user1'},{$set:{'name':'user2'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754c"), "name" : "user2", "age" : 19 }

上面范例只会更新第一条发现的文档,若想更新全部发现的文档,则需要用 multi:true ,具体写法如下

db.user.update({'name':'user1'},{$set:{'name':'user2'}},{multi:true})

上文中用到了更新操作符$set,诸如此类的还有:$inc、$unset、$push、$ne等。感兴趣的伙伴们可以到网上查查具体的含义。

2.2.2、save()

save() 方法通过传入的文档来替换已有文档。

格式

db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})

范例

用 _id = '58e1d2f0bb1bbc3245fa754b' 的文档替换原来的文档,更新之前先查询集合"user"中存在的文档,然后再查询更新以后的所有文档,以便确定是否更新成功

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 } >db.user.save(
{
"_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name":"user3", "age":20
}
)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "user3", "age" : 20 }

2.3、删除文档

MongoDB 用 remove() 删除集合中的文档

格式

db.COLLECTION_NAME.remove(DELLETION_CRITTERIA,justOne)

justOne 如果设为 true 或 1,则只删除一个文档。

范例

删除 name 为 'user1' 的文档,删除之前先查询集合"user"中存在的文档,然后再查询删除以后的所有文档,以便确定是否删除成功

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754c"), "name" : "user1", "age" : 19 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 20 } >db.user.remove({"name":"user1"})
WriteResult({ "nRemoved" : 2 }) # 删除了两条数据 > db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18 }

如果只想删除一条记录,则需要设置 justOne 为 1,如下所示:

db.user.remove({"name":"user1"},1)

如果想删除所有记录,可以这样写

db.user.remove({})

业精于勤,荒于嬉;行成于思,毁于随。

如果你觉得这篇文章不错或者对你有所帮助,可以通过右侧【打赏】功能,给予博主一点点鼓励和支持

MongoDB基础教程系列--第三篇 MongoDB基本操作(二)的更多相关文章

  1. MongoDB基础教程系列--第七篇 MongoDB 聚合管道

    在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最 ...

  2. MongoDB基础教程系列--第六篇 MongoDB 索引

    使用索引可以大大提高文档的查询效率.如果没有索引,会遍历集合中所有文档,才能找到匹配查询语句的文档.这样遍历集合中整个文档的方式是非常耗时的,特别是处理大数据时,耗时几十秒甚至几分钟都是有可能的. 创 ...

  3. MongoDB基础教程系列--第八篇 MongoDB 副本集实现复制功能

    为什么用复制 为什么要使用复制呢?如果我们的数据库只存在于一台服务器,若这台服务器宕机了,那对于我们数据将会是灾难,当然这只是其中一个原因,若数据量非常大,读写操作势必会影响数据库的性能,这时候复制就 ...

  4. MongoDB基础教程系列--第四篇 MongoDB 查询文档

    查询文档 查询文档可以用 find() 方法查询全部文档,可以用 findOne() 查询第一个文档,当然还可以根据 条件操作符 和 $type操作符 查询满足条件的文档. find() 和 find ...

  5. MongoDB基础教程系列--第五篇 MongoDB 映射与限制记录

    上一篇提到的 find() 的方法,细心的伙伴会发现查询的结果都是显示了集合中全部的字段,实际应用中,显然是不够用的.那么有没有办法指定特定的字段显示出文档呢?答案是肯定的,MongoDB 中用映射实 ...

  6. MongoDB基础教程系列--未完待续

    最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...

  7. MongoDB基础教程系列--目录结构

    最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...

  8. MongoDB基础教程系列--第一篇 进入MongoDB世界

    1.什么是MongoDB MongoDB是跨平台的.一个基于分布式文件存储的数据库.由C++语言编写.用它创建的数据库具备性能高.可用性强.易于扩展等特点.MongoDB将数据存储为一个文档,数据结构 ...

  9. MongoDB基础教程系列--第二篇 MongoDB基本操作(一)

    1.安装环境 在官网上下载MongoDB的最新版本,根据自身Windows版本下载正确的MongoDB版本.下载后,双击32位或者64位.msi文件,按操作提示安装就可以了. 说明: 32 位版本的 ...

随机推荐

  1. angular ng-repeat数组中的数组

    //先定义一个数组anular代码: var app = angular.module('serApp', []); app.controller('indexCtrl', function($sco ...

  2. int与integer的区别(基本数据类型与引用数据类型)

    一.先说说int与integer的区别 int 是基本数据类型,默认值为0,不需要进行实例化 integer 是引用数据类型,是int的封装类型,默认值为null,创建该类型需要进行实例化. 基本数据 ...

  3. scala IDE错误:..is cross-compiled with incompatible version....

    下午scala工程出现如下错误: 搜索这个问题,没有找到答案. 直接去官网查看http://scala-ide.org/docs/current-user-doc/faq/index.html,发现了 ...

  4. PHP Closure创建匿名函数

    Closure 类 用于代表匿名函数的类. 匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象.在过去,这个类被认为是一个实现细节,但现在可以依赖它做一些事情.自 PHP 5.4 起, 这个 ...

  5. Linux:- comm命令的妙用

    参数://假设a集.b集.ab交集 # comm [options] textA textB options: 1.表示a集除去ab交集重叠那部分: 2.表示b集除去ab交集重叠那部分: 3.表示ab ...

  6. iOS 创建一个在退出登录时可以销毁的单例

    一.单例简介 单例模式是在软件开发中经常用的一种模式.单例模式通俗的理解是,在整个软件生命周期内,一个类只能有一个实例对象存在. 二.遇到的问题 在平时开发使用单例的过程中,有时候会有这样的需求,在用 ...

  7. 对spring,struts,hibernate及MVC的理解

    对于spring,hibernate,struts等框架,刚开始的时候总是会很迷茫,不知道他们是用来做什么的. 1.对框架的作用理解 个人认为框架的作用是把代码进行了分类,减少了代码的耦合性. 如果不 ...

  8. 程序员的自我修养:高效使用Google解决问题

    如果票选近二十年最伟大的发明,我相信搜索引擎肯定会占据一个不容小觑的位置,它不单是一项发明,更是一项成就,最大程度消灭了信息的不平等.既然人人都可以接触到海量的信息,那么衡量信息财富多寡就只剩下技巧这 ...

  9. ThinkPHP项目总结

    1.当你 require ThinkPHP之后,会自动在App目录下生成 common, Home, Runtime 三个文件夹. 2.输入网址 http://localhost/blog/app/i ...

  10. jquery考试纠错笔记.

    1. 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one +div& ...