[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在文档修改时会分配内存,频繁修改可能导致内存分配和释放开销增加。合理规划内存可以提升查询效率。


runCommandfindAndModify

ps = db.runCommand({
"findAndModify": "sample",
"query": {name: "evers"},
"update": {$set: {email: "1221"}},
"new": true
}).value;

findAndModify用于返回更新前的文档,适用于需要取值或赋值的原子性操作。

上一篇:[311]mysql函数substring_index的用法
下一篇:[309]python生成表情包

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月15日 06时31分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章