标签:recover title 计算机 数据库服务 enc 需要 启动 分片 接下来
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
优点:
缺点:
MongoDB是一款NoSQL数据库
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
在MongoDB中,一行纪录就是一个文档,它是一个由键值对构成的数据结构,MongoDB文档与JSON对象类似。键的值可以包含其他的文档,数组,文档数组。
{ "_id" : ObjectId("5a55c9857c1ccc05bc71e9b0"), "aid" : 2, "view" : "--", "danmaku" : 3564, "reply" : 3564, "favorite" : 2763, "coin" : 924, "share" : 1511, "now_rank" : 0, "his_rank" : 0, "no_reprint" : 0, "copyright" : 2 }
MongoDB在集合中存储文档。集合类似于关系数据库中的表。然而,与表不同的是集合不要求它里面的文档具有相同的结构。在MongoDB中,存储在集合中的文档必然有一个唯一的_id字段作为主键。
MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center#community
根据你的系统下载 32 位或 64 位的 .msi 文件,下载后双击该文件,按操作提示安装即可。
安装过程中,你可以通过点击 "Custom(自定义)" 按钮来设置你的安装目录
安装完之后
MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下((如: C:\ 或者 D:\ 等 )。
比如 我新建的目录为 D:/data/db 和 D:/data/log/mongod.log
接下来新建mongod.cfg放到MongDB根目录下,mongod.cfg内容为
systemLog: destination: file path: D:\MongDB\data\log\mongod.log storage: dbPath: D:\MongDB\data\db
其中path和dbpath分别为第二步新建的log文件夹和db文件夹的路径
从命令提示符下运行 MongoDB 服务器,你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件。
配置mongoDB服务(以后可以在服务那里开启mongod服务或者设置为开机启动,不需要手动运行mongod.exe)
通过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。
命令:
D:\MongDB\bin\mongod.exe --config D:\MongDB\mongod.cfg --install
然后再启动服务
net start MongDB
另外,关闭MongoDB服务
net stop MongoDB
移除MongoDB 服务
sc delete MongDB
如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo.exe文件,MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
> mongo MongoDB shell version: 3.0.6 connecting to: test ……
MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包。
下载地址:https://www.mongodb.com/download-center#community
下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) 。
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解压 mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 将解压包拷贝到指定目录
MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
export PATH=<mongodb-install-directory>/bin:$PATH
<mongodb-install-directory> 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb 。
MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
以下实例中我们将data目录创建于根目录下(/)。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。
mkdir -p /data/db
你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。
注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。
$ ./mongod 2015-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal 2015-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16 2015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52 2015-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7
如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。
MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
$ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell. ……
show dbs 查看当前所有的数据库
use dbname 进入dbname数据库,没有就创建
db.test.insert({‘name‘:‘jack‘}) 创建test集合,并往其中插入数据(数据一般是字典类型){‘name‘:‘jack‘}
$gt 匹配大于(>)指定值的文档
$gte 匹配大于等于指定值的文档
$lt 匹配小于指定值的文档
$lte 小于等于
$ne 不等于
$in 匹配数组中的任意值
例:
查找score大于等于80的数据
db.find({‘score‘:{$gte:80}})
查找students是55,54,56中任一个的数据
db.test.find({‘students‘:{$in:[55,54,56]}})
$or 或条件查询
查询students大于等于55或者title等于python_mongodb教学的文档
db.test.find({$or:[{‘students‘:{$gte:55}},{‘title‘:‘python_MongoDB教学‘}]})
$and 与条件查询
$not 查询和表达式不匹配的文档
$nor 查询与任一表达式都不匹配的文档
db.test.find({$nor:[{‘students‘:{$gte:57}},{‘title‘:‘python_MongoDB教学‘}]})
$inc 将文档中的某个field对应的value自增/减某个数字amount
db.test.update({‘class‘:‘python‘},{$inc:{‘students‘:1}})
$mul 将文档中的某个field对应的value做乘法操作,同上。
db.test.update({‘score‘:60},{$mul:{‘students‘:0.8}})
$rename 重名名文档中指定的字段名字
$set 更新文档中的某一个字段,而不是全部替换
db.test.update({‘students‘:116},{$set:{‘students‘:56}})
加上 {multi:true} 就会修改所有匹配条件的文档
在MongoDB中,可以使用insert()方法和save方法插入一个文档到MongoDB集合中,如果此集合不存在,MongoDB会自动为你创建。先用命令行连接到MongoDB,再进入tz_mongo
数据库。use tz_mongo
然后插入一个文档到test集合,如果test集合不存在,这个操作会自己创建test集合。例如:
> db.test.insert({‘class‘:‘python‘,‘students‘:50}) > db.test.save({‘class‘:‘python‘,‘students‘:50}) > db.test.find() { "_id" : ObjectId("5a586e8522dbc47846dd8e1f"), "class" : "python", "students" : 50 } { "_id" : ObjectId("5a586eae22dbc47846dd8e20"), "class" : "python", "students" : 50 }
在插入的文档中,如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。_id为集合中的每个文档唯一的12个字节的十六进制数。
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。update() 方法。
update方法
update方法用于更新已经存在的文档。
我们先在test里面插入条数据,然后再进行修改。 > db.test.insert({‘title‘:‘MongoDB教学‘}) WriteResult({ "nInserted" : 1 }) > db.test.update({‘title‘:‘MongoDB教学‘},{$set:{‘title‘:‘tz_MongoDB教学‘}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
然后再查看数据发现数据已经被修改。这里set的作用是指更新文档当中的某一个字段,如果不使用set,文档会被直接替换。update方法默认只更新一个文档.如果需要更新多个文档,需要指定multi参数
save方法
save() 方法通过传入的文档来替换已有文档。
>db.test.save({‘_id‘:ObjectId("5a586e8522dbc47846dd8e1f"),‘class‘:‘java‘,‘students‘:56})
mongo查询数据使用的主要方法就是find。find方法以分结构化的方式来显示所有文档。find方法可以传入查询条件来进行数据查询。也可以不传。
> db.test.find() 默认返回20条数据 > db.test.findOne() 返回一条数据 > db.test.find().limit(num) 返回num条数据,不超过20条 > db.test.find({‘class‘:‘爬虫1班‘}) 通过给定的字段查询 > db.test.find({‘students‘:{$gte:58}}) 查询students大于等于58的数据 > db.test.find({$or:[{‘students‘:58},{‘students‘:55}]}) or操作符
使用remove()方法从集合中删除文档。这个方法需要一个条件文档用来决定哪些文档将被删除。
> db.test.remove({‘class‘:‘爬虫1班‘}) 删除指定条件匹配的所有文件。 > db.test.remove({‘class‘:‘爬虫1班‘},{justOne:true}) 删除匹配条件的一条数据 > db.test.remove({}) 删除当前文档 > db.test.drop() 删除集合
删除操作也会返回一个WriteResult对象,他包含了操作的状态信息,nremoved字段值,表示被删除的字段数量。
db.test.insert(data) #插入数据 db.test.save(data) #保存数据,如果不存在就插入,若存在就修改(必须id也一样才是存在) db.test.remove(conditions) #删除指定条件匹配的所有数据 db.test.remove(conditions,{justone:true}) #删除匹配条件的一条数据 db.test.remove({}) #删除整个文档 db.test.drop() #删除这个集合 db.test.update({‘name‘:‘jack‘},{$set:{‘score‘:90}}) #把名字为jack的人的得分改为90 db.test.update(conditions,{$set:newdata},{multi:true}) #update只修改一条,加上 {multi:true} 就会修改所有匹配条件的文档 db.test.findone() db.test.find(conditions) #查找匹配条件的文档,默认最多返回20条 db.test.find(conditions).limit(num) #查找匹配条件的文档,最多返回num条,num不超过20
使用pymongo这个第三方库
安装:
pip install pymongo
使用
""" 使用pymongo库操作MongoDB数据库 """ import pymongo # 1.连接数据库服务器,获取客户端对象 mongo_client=pymongo.MongoClient(‘localhost‘,27017) # 2.获取数据库对象 db=mongo_client.myDB # db=mongo_client[‘myDB‘] # 3.获取集合对象 my_collection=db.myCollection # my_collection=db[‘myCollection‘] print("——"*50) # 插入文档 tom={‘name‘:‘Tom‘,‘age‘:18,‘sex‘:‘男‘,‘hobbies‘:[‘吃饭‘,‘睡觉‘,‘打豆豆‘]} alice={‘name‘:‘Alice‘,‘age‘:19,‘sex‘:‘女‘,‘hobbies‘:[‘读书‘,‘跑步‘,‘弹吉他‘]} tom_id=my_collection.insert(tom) alice_id=my_collection.insert(alice) print(tom_id) print(alice_id) print("——"*50) # 查询文档 cursor=my_collection.find() print(cursor.count()) # 获取文档个数 for item in cursor: print(item) print("——"*50) # 修改文档 my_collection.update({‘name‘:‘Tom‘},{‘$set‘:{‘hobbies‘:[‘向Alice学习读书‘,‘跟Alice一起跑步‘,‘向Alice学习弹吉他‘]}}) for item in my_collection.find(): print(item) print("——"*50) # 删除文档 # my_collection.remove({‘name‘:‘Tom‘},{‘justOne‘:0}) my_collection.remove() for item in my_collection.find(): print(item)
注意 mongodb里的数据都是字典格式的。
补充
多条插入:
1 >>> new_posts = [{"author": "Mike", 2 ... "text": "Another post!", 3 ... "tags": ["bulk", "insert"], 4 ... "date": datetime.datetime(2009, 11, 12, 11, 14)}, 5 ... {"author": "Eliot", 6 ... "title": "MongoDB is fun", 7 ... "text": "and pretty easy too!", 8 ... "date": datetime.datetime(2009, 11, 10, 10, 45)}] 9 >>> result = posts.insert_many(new_posts) 10 >>> result.inserted_ids 11 [ObjectId(‘...‘), ObjectId(‘...‘)]
获取集合的数据条数:
>>> collection.count()
或者说满足某种查找条件的数据条数:
>>> collection.find({"author": "Mike"}).count()
查询结果排序
>>> db.Account.find().sort("UserName") #默认为升序 >>> db.Account.find().sort("UserName",pymongo.ASCENDING) #升序 >>> db.Account.find().sort("UserName",pymongo.DESCENDING) #降序
查询结果多列排序
>>> db.Account.find().sort([("UserName",pymongo.ASCENDING),("Email",pymongo.DESCENDING)])
修改多级字段数据
假如要把这样一条数据
collection.update({"_id":ObjectId("58121b864c26bf241b000056")},{"$set":{"student.grades.math":80}})
标签:recover title 计算机 数据库服务 enc 需要 启动 分片 接下来
原文地址:https://www.cnblogs.com/woaixuexi9999/p/9260814.html