mongoDB 文档更新
作者:网络转载 发布时间:[ 2016/10/25 10:05:31 ] 推荐标签:数据库 mongoDB
mongoDB对于文档的更新,既可以实现文档的更新,也可以实现文档随意的增减键(列),这是与传统的关系型数据库大的不同之处,也是所谓的无模式带来的一定程度上的便利。即mongoDB支持文档更新,也支持文档替换。本文给出了mongoDB更新语法及示例。
预备热身
Linux下快速安装MongoDB
Windows平台下安装MongoDB
mongoDB 启动与停止
mongo shell连接到mongoDB及shell提示符下执行js脚本
mongoDB简介及关键特性
SQL与mongoDB对比及映射
一、文档更新语法
db.collection.update(
<query>, //查询或过滤条件
<update>, //修改器(被修改键及内容)
{
upsert: <boolean>, //为true或者false,如果为true,未找到匹配文档则创建新文档
multi: <boolean>, //用于确实是单行还是更新所有行(true为所有行)
writeConcern: <document> //设定写关注,用于确保强一致性还是弱一致性
} //后面的3.2之后的语法参数基本相同
)
db.collection.updateOne( //仅3.2之后版本
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>
}
)
db.collection.updateMany( //仅3.2之后版本
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>
}
)
db.collection.replaceOne( //仅3.2之后版本,用于替换文档
<filter>,
<replacement>,
{
upsert: <boolean>,
writeConcern: <document>
}
)
更新相关事项
mongoDB中所有写操作是基于单个文档基本的原子性操作(3.2版本后)
_id类不支持更新,也不支持使用一个不同的_id文档进行替换
文档的更新可能会导致文档变大,会重新申请及分配新的磁盘空间
二、演示文档更新
1、db.collection.updateOne()
//演示环境
db.version()
3.2.9
//插入演示数据,此处略,参考:mongoDB文档查询 插入演示数据部分
//链接地址 http://blog.csdn.net/leshami/article/details/52901240
//下面查询favorites.artist值为Picasso的文档
> db.users.find({"favorites.artist": "Picasso"},
{finished:0,points:0,badges:0}).pretty()
{
"_id" : 1,
"name" : "sue",
"age" : 19,
"type" : 1,
"status" : "P",
"favorites" : {
"artist" : "Picasso",
"food" : "pizza"
}
}
{
"_id" : 6,
"name" : "abc",
"age" : 43,
"type" : 1,
"status" : "A",
"favorites" : {
"food" : "pizza",
"artist" : "Picasso"
}
}
//下面对favorites.artist值为Picasso的文档进行更新
//使用$set修改器来设置某个列的值,如下设置favorites.food的值pie,且type值为3
//使用$currentDate为新增的列lastModified设置当前日期
> db.users.updateOne(
{ "favorites.artist": "Picasso" },
{
$set: { "favorites.food": "pie", type: 3 },
$currentDate: { lastModified: true }
}
)
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
//查看更改后的文档结果
> db.users.find({"favorites.artist": "Picasso"},
{finished:0,points:0,badges:0}).pretty()
{
"_id" : 1, //这个文档已经被修改,且新增了列
"name" : "sue",
"age" : 19,
"type" : 3,
"status" : "P",
"favorites" : {
"artist" : "Picasso",
"food" : "pie"
},
"lastModified" : ISODate("2016-09-30T07:25:28.135Z")
}
{
"_id" : 6, //而_id为6的这个文档没有被修改,即updateOne方法仅更新一个文档
"name" : "abc",
"age" : 43,
"type" : 1,
"status" : "A",
"favorites" : {
"food" : "pizza",
"artist" : "Picasso"
}
}
2、db.collection.updateMany()
//下面更新favorites.artist值为Picasso的文档,
//更新的内容为favorites.artist值为Pisanello,type的值为3,且增加或修改lastModified字段
> db.users.updateMany(
{ "favorites.artist": "Picasso" },
{
$set: { "favorites.artist": "Pisanello", type: 3 },
$currentDate: { lastModified: true }
}
)
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } //此处提示有2个匹配的文档,更新数为2
//再次查询favorites.artist值为Picasso的文档,其结果无任何文档返回,因为已经被更新
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11