1.创建数据库(以电影数据库为例)
use tutorial (数据库名)
show database(查看)
db.createCollection('movie') (创建集合)
show collections
2.插入数据
insert
操作有几点需要注意:
- 不同key-value需要用逗号隔开,而key:value中间是用冒号;
- 如果一个key有多个value,value要用[]。哪怕当前只有一个value,也加上[]以备后续的添加;
- 整个“数据块”要用{}括起来;
- 批量插入的格式是这样的:db.movie.insert([{movie1},{movie2}])
db.movie.insert(
{
title: 'Forrest Gump',
directed_by: 'Robert Zemeckis',
stars: ['Tom Hanks', 'Robin Wright', 'Gary Sinise'],
tags: ['drama', 'romance'],
debut: new Date("1994-07-06T00:00:00"),
likes: 864367,
dislikes: 30127,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date("2020-10-15T00:00:00"),
like: 0
},
{
user:'user2',
message: 'My first comment too!',
dateCreated: new Date("2019-04-15T00:00:00"),
like: 0
}
]
}
)
3. 查询
- 单条件查询:db.movie.find({'directed_by':'David Fincher'}).pretty()
- 多条件查询:db.movie.find({'directed_by':'David Fincher' ,'tags’:'romance'}).pretty()
上面是and的关系,or的关系查询语法如下:
db.movie.find(
{
$or:
[ {'stars':'Robin Wright'},
{'stars':'Morgan Freeman'}
]
}).pretty()
找出50万以上人赞的电影:
db.movie.find({'likes':{$gt:500000}}).pretty()
类似的运算符还有:$lt:小于;$lte
:小于或等于;$gte
:大于或等于;$ne
:不等于。
如果你确切地知道返回的结果只有一个,也可以用findOne,findOne()
自带pretty模式,所以不能再加pretty()
,将报错。
如果结果很多而你只想显示其中一部分,可以用limit()
和skip()
,前者指明输出的个数,后者指明从第二个结果开始数。
db.movie.find().limit(2).skip(1).pretty()
- 局部查询
find的第二个参数是用来控制输出的,1表示要返回,而0则表示不返回。默认值是0,但_id
是例外,因此如果你不想输出_id
,需要显式地声明。
db.movie.find({'tags':'drama'},{'debut':1,'title':1,'id':0}).pretty()
4.更新数据库
- updateOne(更新一部)/updateMany(更新全部符合条件的)
第一个大括号里表明要选取的对象,第二个表明要改动的数据。MongoDB提供了一种简便的方法,即 $inc 可以对现有条目进行增量操作。假设又有人对《七宗罪》点了两个赞,则可以:
db.movie.updateOne({title:'Seven'}, {$inc:{likes:2}})
db.movie.updateMany({}, {$inc:{likes:10}})
$push操作
db.movie.updateOne({'title':'Seven'}, {$push:{'tags':'popular'}})
5.删除条目
与更新语法类似,删除一条则是deleteOne,多条为deleteMany。
db.movie.deleteOne({'tags':'romance'})