MongoDB安装(Windows平台)
1、MongoDB官网下载
2、安装路径问题
MongoDB 的安装路径最好不要太深,因为后面需要经常切换到MongoDB 的 bin 目录执行命令。
3、MongoDB的安装、配置
我这边把mongodb安装到 F:\mongodb 目录
cmd切换到F盘,进入mongodb的bin目录: cd F:\mongodb\bin
mongod --logpath "F:\mongodb\data\log\mongodb.log"
指定数据存放的目录: mongod --dbpath "F:\mongodb\data\db"
执行完上述命令,命令行最后会出现类型下面这样的描述,就表示配置成功:
2018-04-10T11:53:13.790+0800 I CONTROL [initandlisten]
2018-04-10T11:53:15.014+0800 I FTDC [initandlisten] Initializing full-time d
iagnostic data capture with directory 'F:/data/db/diagnostic.data'
2018-04-10T11:53:15.021+0800 I NETWORK [thread1] waiting for connections on por
t 27017
2018-04-10T11:53:16.032+0800 I FTDC [ftdc] Unclean full-time diagnostic data
capture shutdown detected, found interim file, some metrics may have been lost.
OK
接着重新打开一个cmd窗口,进入到mongo的bin目录,输入:mongo
F:\mongodb\bin>mongo
MongoDB shell version v3.4.14
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.14
Server has startup warnings:
2018-04-10T11:53:13.786+0800 I CONTROL [initandlisten]
2018-04-10T11:53:13.787+0800 I CONTROL [initandlisten] ** WARNING: Access contr
ol is not enabled for the database.
2018-04-10T11:53:13.788+0800 I CONTROL [initandlisten] ** Read and wri
te access to data and configuration is unrestricted.
2018-04-10T11:53:13.788+0800 I CONTROL [initandlisten]
2018-04-10T11:53:13.789+0800 I CONTROL [initandlisten] Hotfix KB2731284 or late
r update is not installed, will zero-out data files.
2018-04-10T11:53:13.790+0800 I CONTROL [initandlisten]
出现上面的内容,说明已经成功连接数据库。
4、常见问题(代补充)
如果出现端口占有等情况,在任务管理器中关闭mongo.exe,在bin目录下重新运行:
mongod --dbpath "F:\mongodb\data\db"
接着,重新打开一个cmd,在bin目录下输入:mongo
就会出现一个shell,大功告成。
mongodb极简入门
-
创建数据库
use myshujuku
-
显示数据库
show databases
-
添加一个集合
db.createCollecton('movie')
-
显示集合
show collections
-
删除集合
db.movie.drop()
- 插入数据
电影名字
导演
主演(可能多个)
类型标签(可能多个)
上映日期
喜欢人数
不喜欢人数
用户评论(可能多个)
db.movie.insert( { title: 'Forrest Gump', directed_by: 'Robert Zemeckis', stars: ['Tom Hanks', 'Robin Wright', 'Gary Sinise'], tags: ['drama', 'romance'], debut: new Date(1994,7,6,0,0), likes: 864367, dislikes: 30127, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2013,11,10,2,35), like: 0 }, { user:'user2', message: 'My first comment too!', dateCreated: new Date(2013,11,11,6,20), like: 0 } ] } )
请注意,这里插入数据之前,我们并不需要先声明movie这个集合里面有哪些项目。我们直接插入就可以了~这一点和SQL不一样,SQL必须先声明一个table里面有哪些列,而MongoDB不需要。 几点需要注意:
- 不同key-value需要用逗号隔开,而key:value中间是用冒号;
- 如果一个key有多个value,value要用[]。哪怕当前只有一个value,也加上[]以备后续的添加;
- 整个“数据块”要用{}括起来;
-
查询全部数据
db.movie.find().pretty()
pretty()的作用是规范我们输出的格式,易于阅读。 仔细观察find()的结果,你会发现多了一个叫’_id’的东西,这是数据库自动创建的一个ID号,在同一个数据库里,每个文档的ID号都是不同的。 批量插入的格式是这样的:db.movie.insert([{ITEM1},{ITEM2}])
。几部电影的外面需要用[]括起来。 - 条件查询数据
db.movie.find({'directed_by':'David Fincher'}).pretty()
db.movie.find({'directed_by':'David Fincher', 'stars':'Morgan Freeman'}).pretty()
db.movie.find( { $or: [ {'stars':'Robin Wright'}, {'stars':'Morgan Freeman'} ] }).pretty()
db.movie.find({likes:{$lt:200000}}).pretty()
类似的运算符还有:$lte
:小于或等于;$gte
:大于或等于;$ne
:不等于。 - 如果结果很多而你只想显示其中一部分,可以用limit()和skip()
前者指明输出的个数,后者指明从第二个结果开始数。比如:
db.movie.find().limit(2).skip(1).pretty()
db.movie.find({'tags':'drama'},{'debut':1,'title':1}).pretty()
对于符合条件的条目,我们都是返回整个JSON文件的。这类似于SQL里面的SELECT *。有的时候,我们需要的,仅仅是部分数据,这个时候,find的局部查询的功能就派上用场了。先来看一个例子,返回tags为drama的电影的名字和首映日期。
这里find的第二个参数是用来控制输出的,1表示要返回,而0则表示不返回。默认值是0,但_id是例外,因此如果你不想输出_id,需要显式地声明:
db.movie.find({'tags':'drama'},{'debut':1,'title':1,'_id':0}).pretty()
-
更新数据
db.movie.update({title:'Seven'}, {$set:{likes:134371}})
-
更新数据(增量更新)
db.movie.update({title:'Seven'}, {$inc:{likes:2}})
这里用的是$inc
,在原有的基础上加2.
注意如果有多部符合要求的电影。则默认只会更新第一个。如果要多个同时更新,要设置{multi:true},像下面这样:
db.movie.update({}, {$inc:{likes:10}},{multi:true})
在原有的值得基础上增加一个值的话,则应该用$push:
db.movie.update({'title':'Seven'}, {$push:{'tags':'popular'}})
- 删除
db.movie.remove()
db.movie.remove({'tags':'romance'})