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,就把按条件查出来多条记录全部更新。

posted @ 2021-07-24 20:23  技术改变命运Andy  阅读(118)  评论(0编辑  收藏  举报