美文网首页
左手MongoDB(快速入门)

左手MongoDB(快速入门)

作者: 羋学僧 | 来源:发表于2021-08-20 08:54 被阅读0次

一、SQL与MongoDB术语对比

SQL MongoDB
表(Table) 集合(Collection)
行(Row) 文档(Document)
列(Col) 字段(Field)
主键(Primary Key) 对象ID(ObjectId)
索引(Index) 索引(Index)
嵌套表(Embeded Table) 嵌入式文档(Embeded Document)
数组(Array) 数组(Array)

二、插入单条数据

插入单条数据的命令为insertOne()

db.getCollection('example_data_1').insertOne({"name":"张小二","age":17,"address":"浙江"})

刚刚插入的数据

三、批量插入数据

批量插入数据的命令为insertMany()

db.getCollection('example_data_1').insertMany([
{"name":"张小三","age":17,"address":"浙江"},
{"name":"张小四","age":16,"address":"上海"},
{"name":"张小五","age":14,"address":"山东"},
{"name":"张小六","age":15,"address":"广东"},
{"name":"张小七","age":12,"address":"广西"},
{"name":"张小八","age":11,"address":"河南"},
{"name":"张小九","age":13,"address":"河北"},
])

刚刚插入的数据

四、查询固定值数据

1、查询所有数据

db.getCollection('example_data_1').find({})

db.getCollection('example_data_1').find()

2、查询特定数据

db.getCollection('example_data_1').find({'字段1':'值1','字段2':'值2'})

查询所有“age”字段为17的记录

db.getCollection('example_data_1').find({'age':17})
db.getCollection('example_data_1').find({'age':17,'name':'张小三'})

3、查询范围值数据

范围操作符及其意义

操作符 意义
$gt 大于(Great Than)
$gte 大于等于(Great Than and Equal)
$lt 小于(Less Than)
$lte 小于等于(Less Than and Equal)
$ne 不等于(Not Equal)

查询所有“age”字段不小于15的记录

db.getCollection('example_data_1').find({'age':{'$gte':15}})

使用范围操作符的查询语句格式如下
db.getCollection('example_data_1').find({'age':{'操作符1':边界1,'操作符2':边界2}})

查询所有“age”大于14并小于17的数据

db.getCollection('example_data_1').find({'age':{'$lt':17,'$gt':14}})

查询所有“age”大于14并小于17的数据,且“name”不为“张小六”的数据
db.getCollection('example_data_1').find({'age':{'$lt':17,'$gt':14},'name':{'$ne':'张小六'}})

4、限定返回那些字段

“find”命令可以接收两个参数:第一个参数用于过滤不同的记录,第二个参数用于修改返回的字段。如果省略第二个参数,则MongoDB会返回所有的字段。

db.getCollection('example_data_1').find(用于过滤记录的字典,用于限定字段的字典)

用于限定字段的字典的Key为各个字段名。其值只有两个0或者1
查询数据集数据,但不返回“name”和“age”字段

db.getCollection('example_data_1').find({},{'age':0,'name':0})

查询数据集数据,只返回“name”和“age”字段
db.getCollection('example_data_1').find({},{'age':1,'name':1})

默认返回“_id”字段
db.getCollection('example_data_1').find({},{'_id':0,'age':1,'name':1})

5、修饰返回结果

(1)满足要求的数据有多少条,count()命令

查询所有“age”大于15的记录有多少条

db.getCollection('example_data_1').find({'age':{'$gt':15}}).count()
(2)限定返回结果集条数,limit()命令

限制只返回5条

db.getCollection('example_data_1').find({}).limit(5)
(3)对查询结果进行排序,sort()命令

字段的值为-1表示倒序,为1表示正序

db.getCollection('example_data_1').find({'age':{'$gt':15}}).sort({'字段名':-1或1})

对所有“age”大于15的数据,按“age”排序

db.getCollection('example_data_1').find({'age':{'$gt':15}}).sort({'age':1})

五、修改数据

updateOne():更新第一条满足要求的数据
updateMany():更新所有满足要求的数据

db.getCollection('example_data_1').updateMany(参数1:查询语句的第一个字典,{'$set':{'字段1':'新的值1','字段2':'新的值2'}})

修改“name”为“张小四”的文档,添加“work”字段,把“age”从16改成22

db.getCollection('example_data_1').updateMany({'name':'张小四'},{'$set':{'work':'新时代农民','age':22}})

六、删除数据

deleteOne():删除第一条满足要求的数据
deleteMany():删除所有满足要求的数据
删除“work”字段为“新时代农民”的所有记录

db.getCollection('example_data_1').deleteMany({'work':'新时代农民'})

七、数据去重

去重操作的命令为“distinct()”

db.getCollection('example_data_1').distinct('字段名',查询语句的第一个字典(可以省略))

(1)对“age”字段去重

db.getCollection('example_data_1').distinct('age')

(2)对满足特定条件的数据去重

查询“age”大于等于15的数据,并对“age”去重

db.getCollection('example_data_1').distinct('age',{'age':{'$gte':15}})

“distinct()”不能实现去重之后带上其他字段

八、使用Python操作MongoDB

(1)安装PyMongo

pip install pymongo

(2)连接数据库

from pymongo import MongoClient

# client = MongoClient('mongodb://用户名:密码@IP地址:端口号')
client = MongoClient('mongodb://127.0.0.1:27017')

database = client.chapter_3
collection = database.example_data_1

# 另一种方式
# database = client['chapter_3']
# collection = database['example_data_1']

MongoDB命令与PyMongo方法对照表

MongoDB命令 PyMongo方法
insertOne insert_one
insertMany insert_many
find find
updateOne update_one
updateMany update_many
deleteOne delete_one
deleteMany delete_many

使用Python批量插入数据

from pymongo import MongoClient
client = MongoClient('mongodb://127.0.0.1:27017')
database = client.chapter_3
collection = database.example_data_1
collection.insert_many([
{"name":"张小十三","age":17,"address":"浙江"},
{"name":"张小十四","age":16,"address":"上海"},
{"name":"张小十五","age":14,"address":"山东"},
{"name":"张小十六","age":15,"address":"广东"},
{"name":"张小十七","age":12,"address":"广西"},
{"name":"张小十八","age":11,"address":"河南"},
{"name":"张小十九","age":13,"address":"河北"},
])

使用Python查询数据

rows = collection.find({'age':{'$lt':17,'$gt':14},'name':{'$ne':'张小十四'}})

for row in rows :
    print(row)

使用Python更新数据

collection.update_one({'name':'张小十四'},{'$set':{'work':'新时代农民','age':22}},upsert = True)

更新操作还支持一个“upsert”参数。该参数的作用是:如果数据存在,则更新;如果数据不存在,则创建。
使用Python删除数据

collection.delete_many({'name':'张小十四'})

九、MongoDB与Python不通用的操作

1、空值
在MongoDB中,空值写作null。Python中,空值写作None
2、布尔值
在MongoDB中,“真”为true,“假”为false。Python中,“真”为True,“假”为False
3、排序参数
在MongoDB中

db.getCollection('example_data_1').find({'age':{'$gt':15}}).sort({'age':1})

Python中

rows = collection.find({'age':{'$gt':15}}).sort('age',1)

4、查询_id
在MongoDB中

db.getCollection('example_data_1').find({'_id':ObjectId("611b6afb1ca0761156dca3b6")})

Python中

from bson import ObjectId
rows = collection.find({'_id':ObjectId("611b6afb1ca0761156dca3b6")})
for row in rows :
    print(row)

相关文章

网友评论

      本文标题:左手MongoDB(快速入门)

      本文链接:https://www.haomeiwen.com/subject/zrnbbltx.html