在MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。
MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
1 新增文档
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);
2 查询文档
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.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);
2 查询文档
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编码顺序比较大小。
日期可以比较大小: 过往 < 现在 < 未来。