mongodb数据库-1-1-mac下mongodb安装和python操作mongodb
1,mogodb安装:
Mac OSX 平台安装 MongoDB
MongoDB 提供了 OSX 平台上 64 位的安装包,你可以在官网下载安装包。
下载地址:https://www.mongodb.com/download-center#community
接下来我们使用 curl 命令来下载安装:
# 进入 /usr/local
cd /usr/local
# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz
# 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz
# 重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
export PATH=/usr/local/mongodb/bin:$PATH
注意添加完之后要source ~/.bash_profile
创建日志及数据存放的目录:
数据存放路径:
sudo mkdir -p /usr/local/var/mongodb
日志文件路径:
sudo mkdir -p /usr/local/var/log/mongodb
接下来要确保当前用户对以上两个目录有读写的权限:
sudo chown runoob /usr/local/var/mongodb
sudo chown runoob /usr/local/var/log/mongodb
以上 runoob 是我电脑上对用户,你这边需要根据你当前对用户名来修改。
2,启动MongoDB的服务端
后台启动
接下来我们使用以下命令在后台启动 mongodb:
mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
--dbpath 设置数据存放目录
--logpath 设置日志存放目录
--fork 在后台运行
控制台启动
如果不想在后端运行,而是在控制台上查看运行过程可以直接设置配置文件启动:
mongod --config /usr/local/etc/mongod.conf
查看 mongod 服务是否启动:
ps aux | grep mongod
使用以上命令如果看到有 mongod 的记录表示运行成功。
启动后我们可以使用 mongo 命令打开一个终端:
因为已经加入了bash_profile,所以可以直接mongo运行一个终端
MongoDB连接
安装了MongoDB之后,是没有密码的,
可以使用Navicat进行MongoDB的连接,
验证是否连接成功
此时,可以通过http访问该数据库,mongodb使用了27017端口,因此在浏览器中打开http://localhost:27017/。
出现如下提示即说明连接成功了。
It looks like you are trying to access MongoDB over HTTP on the native driver port.
3,mongo命令使用:
mongo命令使用中文文档:https://docs.mongoing.com/
use命令:
使用/创建数据库,如果数据库不存在就创建数据库。
show dbs命令:
如果使用show dbs查看数据库输出的没有自己刚刚创建的数据库,那就要先执行一下插入数据。
db命令:
db:查看当前所连接的数据库
查看一条数据
查看一条数据:db.test.find()
4,python使用MongoDB
安装
pip3 install pymongo
连接:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# print(myclient.server_info()) # 判断是否连接成功
mongo_db = myclient['test'] # 这个是库名
mongo_collection = mongo_db['test_collection'] # 这个是表名
插入一条数据:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# print(myclient.server_info()) # 判断是否连接成功
mongo_db = myclient['test'] # 这个是库名
mongo_collection = mongo_db['test_collection'] # 这个是表名
import datetime
info = {
'name' : 'Zarten',
'text' : 'Inserting a Document',
'tags' : ['a', 'b', 'c'],
'date' : datetime.datetime.now()
}
mongo_collection.insert_one(info)
插入多条数据:
import datetime
info_1 = {
'name' : 'Zarten_1',
'text' : 'Inserting a Document',
'tags' : ['a', 'b', 'c'],
'date' : datetime.datetime.now()
}
info_2 = {
'name' : 'Zarten_2',
'text' : 'Inserting a Document',
'tags' : [1, 2, 3],
'date' : datetime.datetime.now()
}
insert_list = [info_1, info_2]
mongo_collection.insert_many(insert_list)
删除一条数据 delete_one()
# 删除一条数据。若删除条件相同匹配到多条数据,默认删除第一条
mongo_collection.delete_one({'text' : 'a'})
删除多条数据:
删除满足条件的所有数据
mongo_collection.delete_many({'text' : 'a'})
更新一条数据
info = {
'name': '桃子 ',
'text': 'peach',
'tags': [1, 2, 3],
'date': datetime.datetime.now()
}
update_condition = {'name' : 'Zarten_2'} #更新的条件,也可以为多个条件
#更新条件多个时,需要同时满足时才会更新
# update_condition = {'name' : 'Pear',
# 'text' : '梨子'}
mongo_collection.update_one(update_condition, {'$set' : info})
###
更新时,若无满足条件,则插入数据
update_one() 详细说明参考
通过设置upsert为True即可
mongo_collection.update_many(update_condition, {'$set' : info}, upsert= True)
更新多条数据 update_many()
info = {
'name': 'Zarten',
'text': 'a',
'tags': [1, 2, 3],
'date': datetime.datetime.now()
}
update_condition = {'text' : 'a'} #更新的条件
#更新条件多个时,需要同时满足时才会更新
# update_condition = {'name' : 'Pear',
# 'text' : '梨子'}
mongo_collection.update_many(update_condition, {'$set' : info})
查询一条数据
查询一条数据 find_one()
匹配第一条满足的条件的结果,这条结果以dict字典形式返回,若没有查询到,则返回None
find_condition = {
'name' : 'Banana',
'text' : 'peach'
}
find_result = mongo_collection.find_one(find_condition)
可以通过projection参数来指定需要查询的字段,包括是否显示 _id ,更多具体用法参考 find()
find_condition = {
'name' : 'Zarten_3',
}
select_item = mongo_collection.find_one(find_condition, projection= {'_id':False, 'name':True, 'num':True})
print(select_item)
查询一个范围的数据
查询范围
范围查询通常用$ 例如:$gte 大于等于 $lt 小于;具体的$符号在文章末尾查看
例如:查询一段时间内的数据
import datetime
find_condition = {
'date' : {'$gte':datetime.datetime(2018,12,1), '$lt':datetime.datetime(2018,12,3)}
}
select_item = mongo_collection.find_one(find_condition)
print(select_item)
通过id查询
通过 _id 来查询
查询条件中_id 类型是ObjectId类型,也就是插入时返回的对象。
若 _id 提供的是str类型的,我们需要转成ObjectId类型
from bson.objectid import ObjectId
query_id_str = '5c00f60b20b531196c02d657'
find_condition = {
'_id' : ObjectId(query_id_str),
}
find_result = mongo_collection.find_one(find_condition)
print(find_result)
查询多条数据
查询多条数据 find()
find() 详细说明
返回满足条件的所有结果,返回类型为 Cursor ,通过迭代获取每个查询结果,每个结果类型为dict字典
find_condition = {
'name' : 'Banana',
'text' : '香蕉'
}
find_result_cursor = mongo_collection.find(find_condition)
for find_result in find_result_cursor:
print(find_result)
计数
注意:此函数在3.7版本添加,以下的版本无法使用,本人版本为3.6.3 固无法使用
find_condition = {
'name' : 'Zarten_1'
}
select_count = mongo_collection.count_documents(find_condition)
print(select_count)
####
db.hr.count()
模糊查询,
import pymongo
import re
#
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# print(myclient.server_info()) # 判断是否连接成功
#
#
mongo_db = myclient['test'] # 这个是库名
mongo_collection = mongo_db['test'] # 这个是表名
find_condition = {
'name': re.compile('name')
}
select_item = mongo_collection.find(find_condition, projection={'_id': False, 'name': True, 'text': True})
# print(select_item)
for i in select_item:
print(i)
mongodb修改字段名称
先MongoDB 切换数据库
MongoDB use 命令可以用来切换数据库
use DATABASE_NAME
切换到指定数据库,如果数据库不存在,则创建数据库
范例
这个范例我们从 test 数据库切换到 twle 数据库
> db
test
> use twle
switched to db twle
> db
twle
然后执行命令
db.all_top_article.update({},{$rename:{"is_future_interview": "tag"}}, false, true)
db.集合名称.update({}, {$rename:{"旧键名称":"新键名称"}}, false, true)
参数提示:
第一个false表示:可选,这个参数的意思是,如果不存在update的记录,true为插入新的记录,默认是false,不插入。
第二个true表示:可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。