在上一章【MongoDB 核心CRUD操作:数据库、集合与文档的语法详解】中,我们详细介绍了如何在MongoDB中进行数据库、集合和文档的基础CRUD操作,包括创建、读取、更新和删除等基本功能 接下来,我们将进行一次全面的综合实践,围绕数据库、集合和文档,结合前面所学的知识,通过具体的例子来演示如何在实际项目中应用这些理论。从数据库的设计、集合的创建,再到文档的管理,我们会一步步引导你完成整个流程,确保你能熟练掌握MongoDB的核心操作。
任务描述
MongoDB综合练习{CRUD(Create、Read、Update、Delete)中的四个操作}
1.创建(进入)mytest数据库
2.向数据库的users集合插入一个username为张三的文档。
3.检查当前数据库和和当前集合有没创建成功。
4.查询users集合当中的文档。
5.统计当前数据库中users集合中的文档数量。
6.查询数据库users集合中username为张三的文档。
7.向数据库users集合中的username为张三的文档,添加一个address属性,属性值为深圳龙岗。
8.将username: "张三" 替换为 username:"李四"。
9.删除username为李四的文档的address属性。
10.向username为"李四"的文档中添加一个hobby:{cities:["上海","北京","广州"],movies:["卡通","惊悚","科幻"]}属性。(嵌套文档操作)
11.查询李四爱好movie中卡通的嵌套文档。
12.向李四中添加一个新的电影类型:爱情。
13.删除喜欢北京的用户。
14.清空users集合。
15.删除users集合(默认会把数据库也给删除了)。
16.新建一个myTest数据库,通过for循环向numbers集合中插入200条数据(数据即文档),并且统计当前数据数量是否够数。(tip:要点击文件刷新)
17.如果我们想向numbers集合插入20000条数据而不仅仅是200条数据呢,有没有性能高一点的法子?因为for遍历循环,意味着insert方法要执行3000次,性能肯定是差的了。
18.查询numbers集合中num为500的 文档。
19.查询numbers集合中num大于500的文档。
20.查询numbers集合中num小于30的文档。
21.查询numbers集合中num大于40小于50的文档。
22.查看numbers集合中的前10条数据。
23.查看numbers集合中的第11-20条的数据。
任务准备
- 安装和配置好Mongodb
- 安装好客户端工具Navicat或Mongodb Shell
- 熟悉Mongodb三大核心基本操作
任务实施
1.创建(进入)mytest数据库
use mytest;
2.向数据库的users集合插入一个username为“张三”的文档。
db.users.insert({username:"张三"});
3.检查当前数据库和和当前集合有没创建成功。
show dbs | show database
show collections
4.查询users集合当中的文档。
db.users.find();
db.users.find({ });
5.统计当前数据库中users集合中的文档数量。
db.user.find().count();
db.users.count();
6.查询数据库users集合中username为张三的文档。
db.users.find({username: "张三"});
7.向数据库users集合中的username为张三的文档,添加一个address属性,属性值为湖南长沙。
db.users.update(
{username: "张三"},
{$set:{address: "湖南长沙"}}
)
8.将username: "张三" 替换为 username:"李四"。
/*单个文档替换*/
db.users.replaceOne({username:"张三"},{username:"李四"})
/*多个文档替换:建议使用save方法直观明了*/
db.users.find({
username: '李四'
}).forEach (function(item) {
item.username=item.username.replace('李四','张三');
db.users.save(item);
});
db.users.find({
username: '李四'
}).forEach (function(item) {
username1=item.username;
username1=username1.replace('李四','张三');
db.users.update({username:'李四'},{$set:{username:username1}});
});
9.删除username为李四的文档的address属性。
db.users.update({username:"李四"},{$unset:{address:1}})
10.向username为"李四"的文档中添加一个hobby:{cities:["上海","北京","广州"],movies:["卡通","惊悚","科幻"]}属性。(嵌套文档操作)
db.users.update({username:'李四'},{$set:{hobby:{cities:["上海","北京","广州"],movies:["卡通","惊悚","科幻"]}}});
11.查询李四爱好movie中卡通的嵌套文档。
MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配,此时的属性名必须使用引号。
db.users.find({'hobby.movies':"卡通"})
12.向李四中添加一个新的电影类型:爱情。
$push 用于向数组中添加一个新对元素(元素可以重复添加)
$addToSet 也是向数组中添加一个新对元素(如果数组中的元素已经存在,则不会重复添加)
db.users.update({username:'李四'},{$push:{'hobby.movies':'爱情'}});
db.users.update({username:"李四"},{$addToSet:{"hobby.movies":"爱情"}})
13.删除喜欢北京的用户。
db.users.remove({"hobby.cities":"北京"})
14.清空users集合。
db.users.remove({})
15.删除users集合(默认会把数据库也给删除了)。
db.users.drop()
16.新建一个myTest数据库,通过for循环向numbers集合中插入200条数据(数据即文档),并且统计当前数据数量是否够数。
use myTest;
for (var i=1 ; i<=200 ; i++) {
db.numbers.insert({num:i})
}
db.numbers.find().count()
17.如果我们想向numbers集合插入20000条数据而不仅仅是200条数据呢,有没有性能高一点的法子?因为for遍历循环,意味着insert方法要执行20000次,性能肯定是差的了。
var arr = [];
for (var i=1 ; i<=20000 ; i++) {
arr.push({num:i})
}
db.numbers.insert(arr);
db.numbers.find();
18.查询numbers集合中num为500的 文档。
db.numbers.find({num:500})
或者
db.numbers.find({num:{$eq:500}})
19.查询numbers集合中num大于500的文档。
db.numbers.find({num:{$gt:500}})
20.查询numbers集合中num小于30的文档。
db.numbers.find({num: {$lt:30}});
21.查询numbers集合中num大于40小于50的文档。
db.numbers.find({num:{$gt:40,$lt:50}});
db.numbers.find({"$where":"this.num>40&&this.num<50"});
db.numbers.find({
"$and": [{
"$where": "this.num>40"
}, {
"$where": "this.num<50"
}]
});
22.查看numbers集合中的前10条数据。
db.numbers.find({nums:{$lte:10}}) //当数据是有序的时候,可以使用这个方法。
或者使用limit()方法,设置数据显示的上限,限制显示数据条目。
db.numbers.find().limit(10)
//无论数据是有序还是无序,皆可用limit()方法,即带条件的查询方式,实现的就是一种分页的功能。
你可以这样理解:limit(10)方法,1页显示10条数据。
23.查看numbers集合中的第11-20条的数据。
db.numbers.find().skip(10).limit(10)
skip()方法,用于跳过指定数量的数据。
skip(10),即跳过前面的前10条数据,limit(10)即1页显示10条数据。
实验实训-巩固练习
接下来,在下一章节中,我们将专注于查询操作的深度探讨。我们将详细介绍如何利用MongoDB提供的丰富查询语言来进行高效的数据检索,包括基本查询、复合条件查询、排序、分页等高级技巧。通过这些内容,你将进一步提升自己在MongoDB中的数据管理能力。