更新修改器是种特殊的键,用来指定复杂的更新操作,比如调整、增加或者删除键,还可能是从操作数组或者内嵌文档.
1.$inc修改器 用来增加值。
> db.analytics.find();
{ "_id" : ObjectId("4fc39b6b57bb647e0855d6ed"), "url" : "www.baidu.com", "pagevi
ews" : 1 }
> db.analytics.update({url:"www.baidu.com"},{"$inc":{"pageviews":1}})
> db.analytics.find();
{ "_id" : ObjectId("4fc39b6b57bb647e0855d6ed"), "url" : "www.baidu.com", "pagevi
ews" : 2 }
2.$set修改器 用来指定一个键的值,如果这个键不存在,则创建它。
> db.users.find();
{ "_id" : ObjectId("4fc3a96f57bb647e0855d6ee"), "name" : "joe", "age" : 30, "sex
" : "male", "location" : "shenzhen" }
> db.users.update({"_id":ObjectId("4fc3a96f57bb647e0855d6ee")},{"$set":{"favorit
e book":"war and peace"}});
> db.users.find();
{ "_id" : ObjectId("4fc3a96f57bb647e0855d6ee"), "age" : 30, "favorite book" : "w
ar and peace", "location" : "shenzhen", "name" : "joe", "sex" : "male" }
3.数组修改器
3.1$push往数组中添加元素
> db.blog.find();
{ "_id" : ObjectId("4fa4e7e8c42348a59791e0d6"), "title" : "My Blog Post", "conte
nt" : "Here's my blog post.", "date" : "2012-12-04", "comments" : [ ] }
> db.blog.update({"title":"My Blog Post"},{"$push":{"comments":{"name":"jenny","
content":"nice post."}}})
> db.blog.findOne();
{
"_id" : ObjectId("4fa4e7e8c42348a59791e0d6"),
"comments" : [
{
"name" : "jenny",
"content" : "nice post."
}
],
"content" : "Here's my blog post.",
"date" : "2012-12-04",
"title" : "My Blog Post"
}
3.2$addToSet可避免重复数据
db.user.update({"age":30},{"$addToSet":{"emails":"joe@gmail.com"}})
> db.users.find();
{ "_id" : ObjectId("4fc3a96f57bb647e0855d6ee"), "age" : 30, "emails" : [ "joe@gm
ail.com" ], "favorite book" : "green eggs and ham", "location" : "shenzhen", "na
me" : "joe", "sex" : "male" }
3.3$addToSet和$each的组合使用
> db.users.update({"age":30},{"$addToSet":{"emails":{"$each":["job@php.net","joe
@python.org"]}}})
> db.users.find();
{ "_id" : ObjectId("4fc3a96f57bb647e0855d6ee"), "age" : 30, "emails" : [ "joe@gm
ail.com", "job@php.net", "joe@python.org" ], "favorite book" : "green eggs and h
am", "location" : "shenzhen", "name" : "joe", "sex" : "male" }
3.4$pop从数组中删除元素
> db.lists.find();
{ "_id" : ObjectId("4fc4f2f04fa262c0188dbc5d"), "todo" : [ "dishes", "laundry",
"dry cleaning" ] }
> db.lists.update({"_id":ObjectId("4fc4f2f04fa262c0188dbc5d")},{"$pop":{"todo":-
1}})//-1表示从数组头开始删除,1表示从数组尾部开始删除
> db.lists.find()
{ "_id" : ObjectId("4fc4f2f04fa262c0188dbc5d"), "todo" : [ "laundry", "dry clean
ing" ] }
3.5$pull从数组中删除指定元素
> db.lists.update({},{"$pull":{"todo":"laundry"}})
> db.lists.find()
{ "_id" : ObjectId("4fc4f2f04fa262c0188dbc5d"), "todo" : [ "dry cleaning" ] }
3.6数组定位修改器
有2钟方法操作数组中的值:通过位置或者定位操作符("$")
3.7upsert选项
upsert是一种特殊的更新。要是没有文档符合更新条件,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新.
> db.math.remove()
> db.math.find()
> db.math.update({"count":25},{"$inc":{"count":3}})
> db.math.find()
> db.math.update({"count":25},{"$inc":{"count":3}},true)
> db.math.find()
{ "_id" : ObjectId("4fc4fb5eb486ea65c4505ae0"), "count" : 28 }
3.8更新多个文档
db.math.update(query, object[, upsert_bool, multi_bool])
设置multi_bool为true即可
> db.runCommand({getLastError:1})
{ "n" : 0, "connectionId" : 1, "err" : null, "ok" : 1 }
上面代码可得到更新的记录数目
3.9返回更改记录
> db.runCommand({"findAndModify":"processes","query":{"status":"READY"},"sort":{
"priority":-1},"remove":true}).value
“findAndModify”:字符串,集合名
“query”:查询文档,用来检索文档的条件
"sort":排序结果的条件
“update”:修改器文档
“remove”:表示是否删除文档
“new”:表示返回的是更新前的文档还是更新后的文档
分享到:
相关推荐
在处理文档更新时,除了完全替换整个文档之外,MongoDB 提供了一组原子性的更新修改器,这些修改器允许对文档的特定部分进行高效更新,确保数据的一致性。以下是几个主要的更新修改器的详细说明: 1. **$inc**: $...
MongoDB 中可以使用 `update` 方法来更新文档,例如 `db.[documentName].update({查询器},{修改器})`。强硬的更新会用新的文档代替老的文档。但是,需要注意的是,如果更新的文档和已有的文档 ID 冲突,那么系统会...
db.collectionName.update({查询器},{修改器}) 例如,要更新 persons 集合中 name 为 tom 的文档的 age 为 25,可以使用以下命令: db.persons.update({name: "tom"}, {age: 25}) 三、upsert 参数的用法 upsert ...
本文将深入探讨如何使用Mybatis拦截器来记录数据更新历史记录,并将其存储到MongoDB中。 首先,我们来理解Mybatis拦截器的原理。Mybatis的拦截器是基于Java的动态代理机制实现的,它允许我们在特定的执行点(如SQL...
2. **局部更新**:使用`$inc`和`$set`修改器进行特定字段的更新: - `$inc`:增加或减少字段值,如`db.users.updateOne({name: 'John'}, { $inc: {age: 1}})`,若字段不存在,会自动创建并设置初始值。 - `$set`:...
3. **查询构建器**:对于查询操作,Compass提供了可视化的查询构建器,允许用户通过拖放字段和选择操作符来构建复杂的查询,而无需编写MongoDB的查询语句(如`find()`或`aggregate()`)。 4. **数据编辑与操作**:...
本篇文章将深入探讨MongoDB中文档的更新操作,包括如何替换文档、处理多条匹配记录的更新以及使用修改器进行细粒度的字段更新。 首先,文档替换是一种常见的更新操作,当需要改变文档结构或整体内容时使用。例如,...
7. 快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划。 8. 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。 安装MongoDB需要安装mongodb-org元数据包,该包包含四个组件包:...
可以通过NuGet包管理器安装`MongoDB.Driver`库。在Visual Studio中,打开Package Manager Console并输入以下命令: ``` Install-Package MongoDB.Driver ``` ### 连接MongoDB数据库 连接到MongoDB数据库需要创建...
1. **安装MongoDB驱动**:为了在C#中与MongoDB交互,我们需要先安装MongoDB的C#驱动程序,通常通过NuGet包管理器进行安装,包名是`MongoDB.Driver`。 2. **连接配置**:连接到MongoDB服务器时,需要提供主机名(或...
6. **脚本编辑器**:对于需要运行JavaScript脚本的场景,NoSQLBooster提供了一个集成的脚本编辑器,支持直接在界面上编写和执行MongoDB的shell命令和脚本。 7. **SSL连接**:为了确保数据传输的安全,NoSQLBooster...
4. 查询构建器:该工具通常包含一个可视化的查询构建器,帮助用户无需编写复杂的MongoDB查询语法就能执行查询操作。这使得非技术背景的用户也能轻松操作。 5. CRUD操作:支持创建(Create)、读取(Read)、更新...
- `remove.bat`:这个批处理脚本可能用于从Windows服务管理器中卸载MongoDB服务。这通常会使用`sc delete`命令来删除服务条目。 6. **在Linux平台上启动MongoDB**: - `startMongoDB.sh`:这是针对Linux环境(如...
为了使Mycat支持MongoDB,我们需要对Mycat的配置文件进行相应的修改。具体的步骤如下: ##### 3.1 修改schema.xml文件 - **配置dataHost** 在`<dataHost>`节点中添加一个新的MongoDB连接配置: ```xml ...
4. **重新启动MongoDB服务**:通过命令行或服务管理器重新启动MongoDB服务。 **注意事项:** - 如果删除`mongod.lock`后仍然无法启动MongoDB服务,这可能是因为其他潜在问题,比如配置文件设置不正确。 - 在某些...
MongoDB 4.0.4 版本是针对 MongoDB 的一个特定更新,为用户提供了许多增强的功能和改进。在 MacOSX 环境下安装 MongoDB 4.0.4,通常涉及到几个关键步骤,这将是我们讨论的重点。 首先,了解 MongoDB 的核心概念至关...
修改器是 MongoDB 中用于更新文档的特殊关键字,例如 `$set`、`$inc` 等。 - `$set` 用于更新字段的值: ```javascript db.stu.update({name:"zxg"},{$set:{name:"xialan"}}) ``` - `$inc` 用于对数字类型的...
在Thinkphp中使用MongoDB进行多条件查询时,需要对框架提供的驱动进行一定的修改以适应MongoDB的查询方式。 在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的...
本实例将深入探讨如何使用C#和ASP.NET进行MongoDB的基本操作,包括新增、修改、查询、分页查询、删除以及批量操作。 首先,我们要了解MongoDB .NET驱动程序。这是官方提供的SDK,允许C#开发者直接与MongoDB服务器...