第2章 MongoDB的增删改查
(黎明你好原创作品,转载请注明)
MongoDB中数据的基本单元叫做文档,采用json的键-值的方式。多个键及其关联的值有序的存放在一起变是文档。类似于编程语言中的键值关系。MongoDB文档都是BSON文档,他是一个JSON的二进制形式。
MongoDB的文档
MongoDB中文档被存储在集合中。集合是一组有关系索引的文档。集合类似于关系数据库中的表。
MongoDB的集合
2.1 方法参考
查询游标方法
名称 | 说明 |
cursor.count() | 返回游标中的文档的数量。 |
cursor.explain() | 报告的查询执行计划,包括索引使用的游标。 |
cursor.hint() | 若要使用查询的特定索引的部队 MongoDB。 |
cursor.limit() | 约束游标的结果集的大小。 |
cursor.next() | 返回游标中的下一个文档。 |
cursor.skip() | 返回一个游标,开始传递或跳过的一些文件后才返回结果。 |
cursor.sort() | 返回结果排序根据排序的规范。 |
cursor.toArray() | 返回一个数组,包含由光标返回的所有文档。 |
名称 | 说明 |
db.collection.insert() | 在集合中创建一个新文档。 |
db.collection.save() | 提供insert()和update ()插入新文件的包装。 |
db.collection.update() | 修改集合中的文档。 |
db.collection.find() | 集合上执行查询,并返回一个游标对象。 |
db.collection.findOne() | 执行查询,并返回一个单独的文档。 |
db.collection.remove() | 从集合中删除的文件。 |
db.collection.count() | 换行计数集合或匹配查询中返回的文档数的计数。 |
db.collection.distinct() | 返回一个数组没有指定的字段不重复值的文件。 |
2.2 Insert()
db.collection.insert(document)Insert()方法有以下行为:
如果该集合不存在,insert()方法将创建集合。
如果文档没有指定一个_id后缀字段,然后 MongoDB 将添加一个_id字段并使用ObjectId为文档分配取值。
如果文档需要增加一个新的字段,则insert()方法可以为文档插入新的字段。这不需要更改集合的数据模型或现有的文档。
db.user.insert({_id: "1", name:{username: "limingnihao", nickname: "黎明你好"}, password: "123456"}) db.user.insert({_id: "2", name:{username: "zhoujielun", nickname: "周杰伦"}, password: "123456", birth: ISODate('1979-01-18')}) db.user.insert({_id: "3", name:{username: "caiyilin", nickname: "蔡依林"}, password: "123456", birth: ISODate('1980-09-15'), special:["看我72变", "花蝴蝶", "特务J"], regionName: "台湾"})
2.3 Save()
db.collection.save(document)插入一个新的文档,或者根据其文档的参数更新现有的文档。
如果文档不包含一个_id的字段进行save时,mongod将向文档中添加一个_id字段并将其分配一个ObjectId。
如果文档中包含一个_id字段和值进行save ()方法时,则在集合中查询此_id的文档执行的是upsert操作。如果集合中不存在具有指定的_id值的文档,save ()方法执行的是insert操作。save ()方法执行时会将现有文档中的所有字段都替换为新文档中字段。
db.user.save({_id: "1", name:{username: "limingnihao", nickname: "黎明你好"}, password: "123456", birth: ISODate('1985-07-15')})
2.4 Update()
db.collection.update( <query>, <update>, <upsert>, <multi> )
修改现有存在的文档或集合时使用。
默认的update()方法值更新单个文档。但是如果multi参数设置为true,则更新操作可以更新全部符合条件的文档。
Query – 类型:文档;用于更新选择过滤。
Update – 类型:文档;需要更新的文档的内容。
Upsert – 类型:文档或boolean;设置为true时,当查询没有匹配到文档时进行新建。默认值为false
Multi: - 类型:文档或boolean;设置为true时,则更新满足查询条件的所有文档(多个)。设置为false时只更新单个文档。默认为false。
字段更新操作方式
名字 | 说明 |
$inc | 用来增加已有键的值,或者在键不存在时创建一个键。是专门来增加(和减少)数字的。只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败。 |
$rename | 重命名字段。新的字段名称不能和文档中现有的字段名相同。 |
$setOnInsert | 执行insert操作时,操作给相应的字段赋值。 |
$set | 用来指定一个键的值。如果这个键不存在,则创建它。 |
$unset | 从文档中移除指定的键。 |
db.user.update({_id: "1"}, {$inc:{age: 1}}, {multi:true}) db.user.update({_id: "1"}, { $rename: { 'password': 'pwd'}}) db.user.update({_id: "4"}, { $setOnInsert: { works: 5}}, {upsert: true}) db.user.update({_id: "1"}, {$set:{password: "654321", age: 28}}) db.user.update({_id: "4"},{$unset: {"works": 5 }})
2.5 Find()
db.collection.find(<criteria>, <projection>) db.collection.findOne(<criteria>, <projection>)
Criteria - 类型:文档;可选,文档的查询过滤条件。
Projection - 类型:文档,对结果进行字段匹配,{ field1: <boolean>, field2: <boolean> ... }。
后面还可以:Sort()排序、Limit()限制个数、Skip()起始点。
db.collection.find(<criteria>, <projection>)返回集合 db.collection.findOne(<criteria>, <projection>)返回一个 db.user.find({_id: "1"}) db.user.find({works: 5}) db.user.find().sort({age:1}) db.user.find().limit(2).sort({age:1}) db.user.find().skip(1).limit(2).sort({age:1})
2.6 Remove()
db.collection.remove(query, justOne)
Query – 类型:文档;用于删除选择过滤。
JustOne – 类型:boolean;当设置为true时只删除一个文档。
db.user.remove({_id: "4"}, true)
2.7 Count()
db.collection.count(<query>)
Query – 类型:文档;用于查询选择过滤。
db.user.count({age: 1})
2.8 Distinct()
db.collection.distinct(field, query)
Field – 类型:字符串;返回非重复的字段。
Query – 类型:文档;查询条件。
db.user.distinct("_id", {age: 1})
相关推荐
在本案例"MongoDB增删改查操作案例-用户信息增删改查.zip"中,我们将探讨如何使用MongoDB进行基本的数据操作,包括添加(Add)、删除(Delete)、修改(Update)和查询(Query)用户信息。 1. 添加操作(Add): 在...
MongoDB是一种分布式文档...- MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系 通过学习这些资源,你将能够更深入地理解如何在MongoDB中进行文档的修改和删除操作,以及如何利用其特性来优化你的数据管理策略。
可以创建一个NoteManager类,负责处理数据的增删改查,同时处理网络错误和数据同步问题。 4. API接口:使用MongoDB的Swift驱动,开发者可以创建一个API接口,通过这个接口与MongoDB服务器进行通信。这通常涉及到...
这些基本操作构成了MongoDB管理和操作的核心,通过Mongo Shell可以进行数据的增删改查,以及数据库的维护和管理。更深入的操作,例如CRUD(创建、读取、更新、删除)操作,通常涉及更复杂的查询和事务处理,需要...
数据库的主要作用是安全地保存数据,并支持数据的增删改查。 - **数据库类型**:分为关系型数据库(如MySQL、Oracle、SQL Server等)和非关系型数据库(如Redis、MongoDB)。关系型数据库通过外键关联表与表之间的...
- RedisTemplate 提供了一系列操作 Redis 的 API,如 `opsForValue()`(操作字符串类型数据)、`opsForHash()`(操作哈希表)等,方便进行键值对的增删改查。 4. **添加拦截器** - 拦截器是 AOP(面向切面编程)...
项目名称中的"note-taker"暗示了它可能包含增删改查(CRUD)操作,让用户创建新的笔记、编辑现有笔记、删除不再需要的笔记以及查看所有笔记。 项目的文件结构通常会包含以下几个关键部分: 1. **index.js**:这是...
6. **数据库集成**:可能涉及到MongoDB或其他NoSQL数据库的连接和操作,如数据增删改查。 7. **错误处理**:理解Node.js中的错误处理机制,如何有效地捕获和处理异常。 8. **单元测试**:使用Mocha、Chai等工具...
这里以Mongoose为例,我们首先安装Mongoose(`npm install mongoose`),然后定义笔记的Mongoose模型,连接数据库并进行增删改查操作。 最后,启动服务器监听端口,`app.listen(port, () => console.log(`Server is...
开发者可能使用PHP的PDO(PHP Data Objects)扩展来安全地与数据库交互,实现增删改查等基本操作。此外,还需要设计RESTful API接口,允许前端通过HTTP请求获取或更新笔记数据。JSON格式常用于数据交换,因为它是轻...