
[310]MongoDB数据插入、删除、更新、批量更新某个字段
数组定位符
发布日期:2021-05-16 09:25:16
浏览次数:20
分类:精选文章
本文共 2705 字,大约阅读时间需要 9 分钟。
MongoDB操作指南
批量更新字段
示例1
db.getCollection('bond_sentiment_news').find({"source": 2, "siteUrl": "http://www.21jingji.com/"}).forEach(function(item) { db.getCollection('bond_sentiment_news').update({"_id": item._id}, {$set: {"siteName": "21经济网"}});});
该代码查询出source
为2且siteUrl
为指定值的文档,并将siteName
字段更新为"21经济网"。
示例2
db.getCollection('my_booking').find({"hospitalName": /xx医院/, "openId": /^2/}).forEach(function(item) { db.getCollection('my_booking').update({"_id": item._id}, {$set: {"payType": "1"}});});
查询出hospitalName
匹配"xx医院"且openId
以2开头的所有记录,并将payType
更新为"1"。
示例3
db.getCollection('my_booking').find({"hospitalName": /运城市中心医院/, "openId": {$not: /^2/}}).forEach(function(item) { db.getCollection('my_booking').update({"_id": item._id}, {$set: {"outTradeNo1": item.outTradeNo2}});});
查询出hospitalName
为"运城市中心医院"且openId
不以2开头的所有记录,并将outTradeNo2
赋值给outTradeNo1
。
MongoDB数据操作
插入文档
db.getCollection('sample').insert({name: "Mongo"});
插入一条记录,字段为name: "Mongo"
。
批量插入
// 注意:MongoDB Shell不支持直接批量插入db.getCollection('sample').insert([{name: "A"}, {name: "B"}]);
如图所示,直接插入只支持第一条数据。完成批量插入需要使用应用驱动或Shell中的循环。
save操作
db.getCollection('sample').save({name: "Mongo"});
save
操作用于在集合中插入或更新文档。如果文档已存在,会更新其字段;否则,会插入新文档。
删除操作
// 删除所有记录db.getCollection('sample').remove({});// 根据条件删除db.getCollection('sample').remove({name: "c"});
remove
操作会删除匹配条件的文档,但不会删除集合本身或索引。
小技巧
如果需要清除大量数据,可以考虑删除整个集合并重新建立索引,这种方法效率远高于逐条删除。
数据更新
强硬更新
db.getCollection('sample').update({name: "evers"}, {$set: {age: 25}});
强硬更新会用新的文档完全替代老的文档,需谨慎使用。
insertAndUpdate
db.getCollection('sample').update({name: "evers"}, {$set: {age: 25}}, true);
第三个参数true
表示存在则更新,否则插入新文档。
批量更新
db.getCollection('sample').update({name: "evers"}, {$set: {age: 25}}, false, true);
第四个参数true
表示批量更新。
修改器
$set
{$set: {name: "Redis"}}
用于指定键值对,存在则修改,不存在则添加。
$inc
{ $inc: {count: 1} }
用于对数字类型字段进行加减操作。
$unset
{ $unset: {age: 1} }
用于删除指定字段。
$push
{ $push: {database: ["Oracle", "MySQL"]} }
用于数组操作,可追加新元素。
$pushAll
{ $pushAll: {database: ["Oracle", "MySQL"]} }
批量添加数组元素。
$addToSet
{ $addToSet: {database: "Oracle"} }
用于添加数组元素,不存在则创建数组。
$pop
{ $pop: {database: 1} }
用于从数组中删除指定位置的元素。
$pull
{ $pull: {database: "Oracle"} }
用于删除数组中的指定元素。
$pullAll
{ $pullAll: {database: ["Oracle", "MySQL"]} }
批量删除数组中的多个元素。
数组定位符 $
{ $set: {database.$.com: "sun"} }
用于对数组中的特定元素进行操作。
$each
与$addToSet
结合批量更新
db.getCollection('sample').update({name: "evers"}, {$addToSet: {database: {$each: ["JS", "DB", "DB"]}}});
循环添加数组元素,确保不重复添加。
内存管理与查询效率
MongoDB在文档修改时会分配内存,频繁修改可能导致内存分配和释放开销增加。合理规划内存可以提升查询效率。
runCommand
与findAndModify
ps = db.runCommand({ "findAndModify": "sample", "query": {name: "evers"}, "update": {$set: {email: "1221"}}, "new": true}).value;
findAndModify
用于返回更新前的文档,适用于需要取值或赋值的原子性操作。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月15日 06时31分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Git简单理解与使用
2019-03-11
echarts 基本图表开发小结
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
JDK9-15新特性
2019-03-11
TreeSet、TreeMap
2019-03-11
JVM内存模型
2019-03-11
可变长度参数
2019-03-11
3、条件查询
2019-03-11
cordova打包apk更改图标
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
文件系统的层次结构
2019-03-11
vue(渐进式前端框架)
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
Linux操作系统的安装与使用
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Docker入门之-镜像(二)
2019-03-12
重置UAG Application admin密码
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12