mongodb数据结构与基本操作增删改查整理(二)

mongodb数据结构学习–增删改查

  1. 插入文档 在数据库中,数据插入是最基本的操作,在MongoDB使用db.collection.insert(document)语句来插入文档; document是文档数据,collection是存放文档数据的集合。

例如:所有用户的信息存放在users集合中,每个用户的信息为一个user文档,插入数据:

db.users.insert(user);

  如果collection存在,document会添加到collection目录下, 如果collection不存在,数据库会先创建collection,然后再保存document

  1. 列表内容

批量插入文档 insert语句不但可以插入单个文档,还可以一次性插入多个文档。

插入多个文档时,insert命令的参数为一个数组,数组元素为BSON格式的文档。

多个文档可以放在一个数组内,一次插入多条数据,例如:

db.users.insert([{name:"tommy"},{name:"xiaoming"}])

  文档批量插入非常方便,但是使用批量插入时也有一些问题需要注意,因为BSON格式的限制,一次插入的数据量不能超过16M,在一个insert命令中插入多条数据时,MongoDB不保证完全成功或完全失败。

查询文档 在MongoDB中,查询指向特定的文档集合,查询设定条件,指明MongoDB需要返回的文档;查询也可以包含一个投影,指定返回的字段。

如下图,在查询过程指定了一个查询条件和一个排序修饰。

在关系型数据库中,投影指的是对列的筛选,类似的,在MongoDB中,投影指的是对出现在结果集中的对象属性的筛选。

文档查询 - find方法 MongoDB中查询检索数据时使用find命令,使用方法如下:

语法:

db.collection.find(criteria,projection);

参数: criteria – 查询条件,文档类型,可选。

projection– 返回的字段,文档类型,可选,若需返回所有字段,则忽略此参数。

find命令两个可选参数,criteria为查询条件,projection为返回的字段,如果不传入条件数据库会返回该集合的所有“`

修改文档–update命令 update命令可以更新指定文档的特定字段值,也可以替换整个文档,如果更新操作会增加文档大小,MongoDB将重新分配空间并重新定位。

语法:

db.collection.update(query,update,{upsert:boolean,multi:boolean});

参数: query:查询条件,文档,和find中的查询条件写法一致。

update:修改内容,文档。

upsert(可选):如果值为true,那么当集合中没有匹配文档时,创建文档。默认false。

multi(可选):如果值为true,那么将更新全部符合条件的文档,否则仅更新一个文档,默认false。

如下示例:将users集合中所有符合条件”age>18”文档的status字段更新为”A”。

修改文档–save命令 save命令可以更新或插入一个新文档,与update命令不同的是,save只能对一个文档进行操作。

语法:

db.collection.save();

参数: document:新的文档;

删除文档–remove命令 需要删除文档时使用remove命令,删除文档可以清理掉不需要的数据,释放存储空间,提升检索效率,但是错误的删除会是一场灾难,因此在执行数据删除操作时需要非常的谨慎!

语法:

db.collection.remove(
query,
justOne
)

参数: query:BSON类型,删除文档的条件。

justOne:布尔类型,true:只删除一个文档,false:默认值,删除所有符合条件的文档。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

mysql关于编码部分(乱码出现的原因和解决方法)

      在使用mysql客户端时,我们会经常出现一个这样一个问题,就是原先好好文字,怎么输入之后就出现乱码了呢?           出现这样的问题: 第一...

66080
来自专栏xingoo, 一个梦想做发明家的程序员

Grunt-cli的执行过程以及Grunt加载原理

通过本篇你可以了解到: 1 grunt-cli的执行原理 2 nodeJS中模块的加载过程 Grunt-cli原理 grunt-cli其实也是Node模块,它可...

27580
来自专栏眯眯眼猫头鹰的小树杈

linux常用指令学习记录

locate会根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名,即所有包含该关键字的文件都将被输出。但是因为数据库的更新一般为一天...

14420
来自专栏WindCoder

Java设计模式学习笔记—单例模式(上)

文章最后“Java设计模式笔记示例代码整合”为本系列代码整合,所有代码均为个人手打并运行测试,不定期更新。本节内容位于其Singleton包(package)中...

7320
来自专栏闵开慧

java文件基本操作与实例

11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择。因为文件是一种常见的...

39180
来自专栏待你如初见

solrCloud相关的管理命令及solrj使用

30730
来自专栏python3

python shelve模块

shelve模块是一个简单的k-value数据,将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。

11310
来自专栏软件开发 -- 分享 互助 成长

文件重定向函数freopen

头文件:stdio.h FILE *freopen( const char *filename, const char *mode, FILE *stream ...

21570
来自专栏null的专栏

Linux C 编程——多线程

线程是计算机中独立运行的最小单位,运行时占用很少的系统资源。与多进程相比,多进程具有多进程不具备的一些优点,其最重要的是:对于多线程来说,其能够比多进程更加节省...

39560
来自专栏技术专栏

慕课网Flask高级编程实战-3.蓝图、模型与CodeFirst

应该讲一些初始化工作,放在对应层级的包的初始化文件 __init__.py 中。比如Flask核心应用app对象初始化应该放在应用层级app包的 __init_...

28530

扫码关注云+社区

领取腾讯云代金券