Document 操作

MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。

MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

新增文档

1.1 新增单一文档

1.1.1 insert函数

语法格式为:db.COLLECTION_NAME.insert(document)。

向test集合中插入单个文档。

db.test.insert({title:'北京尚学堂',description:'程序员的摇篮',url:'www.bjsxt.com',tags:['java','大数据','python'],'time':new ISODate('2020-01-01T10:10:10.000Z')})

1.1.2 save函数

向test集合中插入单个文档。

db.test.save({title:'百战程序员',description:'身经百战,高薪相伴',url:'www.itbaizhan.cn',tags:['javaWeb实战','数据库实战','微服务实战']})

1.1.3 insertOne函数

MongoDB3.2以后的版本中,提供了insertOne()函数用于插入文档。

向test集合中插入单个文档。

db.test.insertOne({title:'尚学堂大数据',description:'培养大数据人才的摇篮',url:'www.bjsxt.com',tags:['hadoop','spark','Hbase']})

1.2 批量新增文档

1.2.1 insert函数

向test集合中批量插入多个文档

db.test.insert([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

1.2.2 save函数

向test集合中批量插入多个文档

db.test.save([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

1.2.3 insertMany函数

MongoDB3.2以后的版本中,提供了insertMany函数用于插入文档。

语法格式:db.COLLECTION_NAME.insertMany([{},{},{},.....])

向test集合中批量插入多个文档

db.test.insertMany([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

1.3 通过变量新增文档

Mongo Shell工具允许我们定义变量。所有的变量类型为var类型。也可忽略变量类型。变量中赋值符号后侧需要使用小括号来表示变量中的值。我们可以将变量作为任意插入文档的函数的参数。

语法格式:变量名=(<变量值>)

1.3.1 变量新增单一文档

定义变量

document=({title:'SpringCloud',tags:['Spring Cloud Netflix','Spring Cloud Security','Spring Cloud Consul']})

新增文档

db.test.insert(document);

db.test.save(document);

db.test.insertOne(document);

1.3.2 变量批量新增文档

定义变量

document=([{title:'SpringCloud',tags:['Spring Cloud Netflix','Spring Cloud Security','Spring Cloud Consul']},{title:'SpringBoot',tags:['Spring Boot']}])

新增文档

db.test.insert(document);

db.test.save(document);

db.test.insertMany(document);

查询文档

MongoDB是通过findOne()和find()函数来实现文档查询的。

2.1 基础应用

2.1.1 findOne函数

findOne函数用于查询集合中的一个文档。语法如下:

db.集合名称.findOne({

    <query>},

    {<projection>

});

参数解释:

query:可选,代表查询条件。

projection:可选,代表查询结果的投影字段名。即查询结果需要返回哪些字段或不需要返回哪些字段。

查询stu集合中第一个文档:

db.stu.findOne();

db.stu.findOne({});

查询stu集合中name字段为lisi的第一个文档:

db.stu.findOne({'name':'lisi'});

查询stu集合中第一个文档,且只显示name字段:

db.stu.findOne({},{'name':1});

查询stu集合中第一个文档,且不显示name和age字段:

db.stu.findOne({},{'name':0,'age':0});

注意:在projection中不能使用{'name':0, 'age':1}这种语法格式,这是错误的语法。projection只能定义要返回的字段或不返回的字段。_id字段是MongoDB维护的字段,是唯一可以在projection中独立使用的。如:{_id:0, 'name':1, 'age':1}

2.1.2 find函数

find函数用于查询集合中的若干文档。语法如下:

db.stu.find({<query>},{<projection>});

参数解释:

query:可选,代表查询条件。

projection:可选,代表查询结果的投影字段名。即查询结果需要返回哪些字段或不需要返回哪些字段。

查询stu集合中的所有文档:

db.stu.find()

db.stu.find({})

查询stu集合中所有name字段为lisi的文档:

db.stu.find({'name':'lisi'});

2.1.3 投影约束

MongoDB中,_id字段是默认返回显示的投影字段。

查询stu集合中所有文档,且只显示name字段:

db.stu.find({},{'name':1});

查询stu集合中所有文档,且显示除name字段以外的其他字段:

db.stu.find({},{'name':0});

_id字段,在投影约束中不能互斥,否则抛出异常。如:{"name":1, "age":0}抛出异常。

包含_id字段,在投影约束中可以和其他字段互斥约束,但是,_id字段必须为非投影显示约束(0), 如:{"name":1, "_id":0} 正确的。

包含_id字段,在投影约束中,如果和其他字段投影约束互斥,且_id字段投影约束为显示(1),会抛出异常,如:{"_id":1, "name":0} 抛出异常。

常用方式: {"_id":0, "xxx":1}   {"xxx":0}

2.2 pretty函数

pretty函数用于格式化find函数查询结果。让查询结果更易查看。findOne函数自动附带格式化查询结果的能力。

语法:

db.stu.find().pretty();

2.3 单条件逻辑运算符

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。

MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

新增文档

1.1 新增单一文档

1.1.1 insert函数

语法格式为:db.COLLECTION_NAME.insert(document)。

向test集合中插入单个文档。

db.test.insert({title:'北京尚学堂',description:'程序员的摇篮',url:'www.bjsxt.com',tags:['java','大数据','python'],'time':new ISODate('2020-01-01T10:10:10.000Z')})

1.1.2 save函数

向test集合中插入单个文档。

db.test.save({title:'百战程序员',description:'身经百战,高薪相伴',url:'www.itbaizhan.cn',tags:['javaWeb实战','数据库实战','微服务实战']})

1.1.3 insertOne函数

MongoDB3.2以后的版本中,提供了insertOne()函数用于插入文档。

向test集合中插入单个文档。

db.test.insertOne({title:'尚学堂大数据',description:'培养大数据人才的摇篮',url:'www.bjsxt.com',tags:['hadoop','spark','Hbase']})

1.2 批量新增文档

1.2.1 insert函数

向test集合中批量插入多个文档

db.test.insert([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

1.2.2 save函数

向test集合中批量插入多个文档

db.test.save([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

1.2.3 insertMany函数

MongoDB3.2以后的版本中,提供了insertMany函数用于插入文档。

语法格式:db.COLLECTION_NAME.insertMany([{},{},{},.....])

向test集合中批量插入多个文档

db.test.insertMany([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

1.3 通过变量新增文档

Mongo Shell工具允许我们定义变量。所有的变量类型为var类型。也可忽略变量类型。变量中赋值符号后侧需要使用小括号来表示变量中的值。我们可以将变量作为任意插入文档的函数的参数。

语法格式:变量名=(<变量值>)

1.3.1 变量新增单一文档

定义变量

document=({title:'SpringCloud',tags:['Spring Cloud Netflix','Spring Cloud Security','Spring Cloud Consul']})

新增文档

db.test.insert(document);

db.test.save(document);

db.test.insertOne(document);

1.3.2 变量批量新增文档

定义变量

document=([{title:'SpringCloud',tags:['Spring Cloud Netflix','Spring Cloud Security','Spring Cloud Consul']},{title:'SpringBoot',tags:['Spring Boot']}])

新增文档

db.test.insert(document);

db.test.save(document);

db.test.insertMany(document);

查询文档

MongoDB是通过findOne()和find()函数来实现文档查询的。

2.1 基础应用

2.1.1 findOne函数

findOne函数用于查询集合中的一个文档。语法如下:

db.集合名称.findOne({

    <query>},

    {<projection>

});

参数解释:

query:可选,代表查询条件。

projection:可选,代表查询结果的投影字段名。即查询结果需要返回哪些字段或不需要返回哪些字段。

查询stu集合中第一个文档:

db.stu.findOne();

db.stu.findOne({});

查询stu集合中name字段为lisi的第一个文档:

db.stu.findOne({'name':'lisi'});

查询stu集合中第一个文档,且只显示name字段:

db.stu.findOne({},{'name':1});

查询stu集合中第一个文档,且不显示name和age字段:

db.stu.findOne({},{'name':0,'age':0});

注意:在projection中不能使用{'name':0, 'age':1}这种语法格式,这是错误的语法。projection只能定义要返回的字段或不返回的字段。_id字段是MongoDB维护的字段,是唯一可以在projection中独立使用的。如:{_id:0, 'name':1, 'age':1}

2.1.2 find函数

find函数用于查询集合中的若干文档。语法如下:

db.stu.find({<query>},{<projection>});

参数解释:

query:可选,代表查询条件。

projection:可选,代表查询结果的投影字段名。即查询结果需要返回哪些字段或不需要返回哪些字段。

查询stu集合中的所有文档:

db.stu.find()

db.stu.find({})

查询stu集合中所有name字段为lisi的文档:

db.stu.find({'name':'lisi'});

2.1.3 投影约束

MongoDB中,_id字段是默认返回显示的投影字段。

查询stu集合中所有文档,且只显示name字段:

db.stu.find({},{'name':1});

查询stu集合中所有文档,且显示除name字段以外的其他字段:

db.stu.find({},{'name':0});

_id字段,在投影约束中不能互斥,否则抛出异常。如:{"name":1, "age":0}抛出异常。

包含_id字段,在投影约束中可以和其他字段互斥约束,但是,_id字段必须为非投影显示约束(0), 如:{"name":1, "_id":0} 正确的。

包含_id字段,在投影约束中,如果和其他字段投影约束互斥,且_id字段投影约束为显示(1),会抛出异常,如:{"_id":1, "name":0} 抛出异常。

常用方式: {"_id":0, "xxx":1}   {"xxx":0}

2.2 pretty函数

pretty函数用于格式化find函数查询结果。让查询结果更易查看。findOne函数自动附带格式化查询结果的能力。

语法:

db.stu.find().pretty();

2.3 单条件逻辑运算符

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

在MongoDB中字符串也可以比较大小。按照Unicode编码顺序比较大小。

日期可以比较大小: 过往 < 现在 < 未来。

原文地址:https://www.cnblogs.com/vincentmax/p/14366323.html