mongodb初识

http://www.mongodb.org.cn/manual/aggregation-group/

1.启动
mongod - 改变data/db位置: --dbpath D:datadb
mongod --install 安装windows系统服务
mongod --remove 卸载windows系统服务
mongo 打开客户端 cmd 窗口
NoSQLBooster4mongodb

mongod --dbpath=D:appmongodb3.4datadb #启动

丰富多彩的数据类型世界
首先我们要先了解一下MongoDB中有什么样的数据类型:

Object  ID :Documents 自生成的 _id

String: 字符串,必须是utf-8

Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)

Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)

Double:浮点数 (没有float类型,所有小数都是Double)

Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)

Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

Null:空数据类型 , 一个特殊的概念,None Null

Timestamp:时间戳

Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

2.概念
- 使用了不存在的对象即创建该对象
- use db 创建或切换当前数据库 内存中
- db.tablename 创建或使用 tablename 内存中

db.dropDatabase(); 删除库

3.指令
db 查看当前使用的数据库
show databases 查看存放在磁盘上的数据库
show tables 查看当前数据库在磁盘上存储的数据表 - Collection


4.增删改查
增加数据:
官方不推荐:
db.tablename.insert([{}]) 增加数据
官方推荐:
db.tablename.insertOne({}) 增加一条数据
db.tablename.insertMany([{}]) 增加多条数据

db.oldboy.insertOne({"name":"2131","age":20})

db.oldboy.insertMany([{"name":"zaizai"},{"name":"wusir2","age":20}])

> db.oldboy.insertMany([{"name":"Linux","score":59},{"name":"Python","score":100},{"name":"Go","score":80}])

查询数据:

db.oldboy.find() 查询所有
db.tablename.find({查询条件}) 查询所有符合条件的数据
db.tablename.findOne({查询条件}) 查询符合条件的第一条数据

> db.oldboy.find({'age':20})
{ "_id" : ObjectId("5cc429c3b604842e45e52b73"), "name" : "2131", "age" : 20 }
{ "_id" : ObjectId("5cc42ab2b604842e45e52b75"), "name" : "wusir2", "age" : 20 }

> db.oldboy.findOne({'age':20})
{
"_id" : ObjectId("5cc429c3b604842e45e52b73"),
"name" : "2131",
"age" : 20
}

修改数据:
官方不推荐:
db.tablename.update({条件},{修改器:{修改值}}) 修改符合条件的第一条数据
官方推荐:
db.tablename.updateOne({条件},{修改器:{修改值}}) 修改符合条件的第一条数据

> db.oldboy.updateOne({"age":20},{$set:{"name":"1111"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

db.tablename.updateMany({条件},{修改器:{修改值}}) 修改符合条件的所有数据

> db.oldboy.updateMany({"age":20},{$set:{"name":"1111"}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 1 }
> db.oldboy.find()
{ "_id" : ObjectId("5cc429c3b604842e45e52b73"), "name" : "1111", "age" : 20 }
{ "_id" : ObjectId("5cc42ab2b604842e45e52b74"), "name" : "zaizai" }
{ "_id" : ObjectId("5cc42ab2b604842e45e52b75"), "name" : "1111", "age" : 20 }

删除数据:
官方不推荐:
db.tablename.remove({条件}) 删除所有符合条件的数据
官方推荐:
db.tablename.deleteOne({条件}) 删除符合条件的第一条数据

> db.delete.deleteOne({'name':'zaizai'})
{ "acknowledged" : true, "deletedCount" : 0 }

db.tablename.deleteMany({条件}) 删除所有符合条件的数据

db.delete.deleteMany({'name':'zaizai'})

5.修改器:

$set 强制修改 {$set:{name:123}} 强制将name字段的值修改为123 可以创建字段

db.Oldboy.updateOne({"score":20},{$set:{"score":59}})  #把 "score" 为 20 分的 "score" 赋值为 59 分

$unset 删除字段 {$unset:{name:1}} 强制删除name字段

$inc 引用增加 {$inc:{age:1}} 对age字段引用增加 原有数值基础上增加 1


Array
$push 相当于列表数据类型的append 追加数据 {$push:{array:"666"}}

db.Oldboy.update({},{$set:{"test_list":[1,2,3,4,5]}})

db.oldboy.updateMany({"name":"zaizai"},{$pushAll: {"test_list":[7,8,9]}})

$pushAll extend 遍历列表循环追加数据 {$pushAll:{array:["666",777,888]}}#最加多个

$pull 相当于列表数据类型的remove 删除Item {$pull:{array:"666"}}

db.Oldboy.updateMany({"score":59},{$pull:{"test_list":6}})#注意先有push

db.oldboy.updateMany({"name":"zaizai"},{$pushAll: {"test_list":[11,22,33]}})

$pullAll 遍历列表循环删除数据 {$pullAll:{array:["666",777,888]}}

$pop 相当于列表数据类型的pop(0/-1) 只能删除第一个和最后一个 {$pop:{array:1/-1}}

db.Oldboy.updateMany({"score":59},{$pop:{"test_list":-1}})

1 : 删除最后一个
-1:删除第一个

6.$ 特殊用法:
db.tablename.updateOne({hobby:"娟儿"},{$set:{"hobby.$":"小圈儿"}})
存储符合条件元素的下标索引

把其中一个爱好为娟的改成小圆圈

7.$关键字

"$"  在 update 中 加上关键字 就 变成了 修改器

其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

把 "score": 100 的 test_list 里面的 2 改为 9

> db.Oldboy.find()
{ "_id" : ObjectId("5b990189430c27444ccdd650"), "name" : "Linux", "score" : 100, "test_list" : [ 2, 3, 4 ] }
db.Oldboy.updateOne({"score":100},{$set:{"test_list.0":9}})

把9还原成2

db.Oldboy.updateMany({"score":100,"test_list":9},{$set:{"test_list.$":2}})

$lt 小于

 db.Oldboy.find({"score":{$lt:80}})

$gt

$lte
$gte
$ne 不等于
$eq or : 等于

$in {hobby:{$in:["娟儿","小圈儿"]}} 相同字段 or

db.oldboy.find({'name':"Go","score":80}) #不用加in的

> db.oldboy.find({"name":{$in:["Linux","Go"]}})#查询一个键的多个值
{ "_id" : ObjectId("5cc457e4b604842e45e52b76"), "name" : "Linux", "score" : 59
{ "_id" : ObjectId("5cc457e4b604842e45e52b78"), "name" : "Go", "score" : 80 }

$or {$or:[{hobby:"娟儿"},{age:84}]} 不同字段间的 or

db.oldboy.find({$or:[{"score":80},{'score':333}]})#满足任意 $or 条件的数据,至少要满足一个

$all {hobby:{$all:["娟儿","小圈儿"]}} 跟in一个吊样

$and or , {$and:[{hobby:"娟儿"},{age:84}]} 并列条件 之 $and

8.sort skip limit
1.排序 sort  .sort({"price":-1})

db.Oldboy.find().sort({"price":1}) 升序

db.Oldboy.find().sort({"price":-1}) 降序序

2.跳过 skip  .skip(2)

3.选取 limit  .limit(2)

db.Oldboy.find().limit(2)

分页:
db.tablename.find({}).sotr(_id:-1).limit(num).skip((page-1)*num)

$inc 将查询到的结果 加上某一个值 然后保存
db.Oldboy.updateOne({"score":59},{$inc:{"score":1}})
db.Oldboy.updateOne({"score":60},{$inc:{"score":-40}})

经典实例

如果 price.1 中小于19800 则加 200

db.Oldboy.update({"name":"路飞学城-骑士计划","price.1":{$lt:19800}},{$inc:{"price.1":200}})

复习一下:"price.1":{$lt:19800} 是查找 price.1 小于 19800

复习两下:{$inc:{"price.1":200}} 是什么啊? price.1 拿出来 加上 200 之后 再存进去

上节课我们也学习了 $ 的用法,现在我们混搭 $ 再做一个练习

我们把 price 小于 19500  的 自动补上 200

> db.Oldboy.update({"name":"路飞学城-骑士计划","price":{$lt:19500}},{$inc:{"price.$":200}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.Oldboy.find()
{ "_id" : ObjectId("5b990568430c27444ccdd653"), "name" : "路飞学城-骑士计划", "price" : [ 19800, 19700, 19500, 18800 ], "other" : { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 } }

$ 这个只储存一个下标 所以第二个没改

把 count 大于 180 的 start 改为 "2018年8月10日"

db.Oldboy.update({"price.count":{$gt:180}},{$set:{"price.$.start":"2018年8月10日"}})

9.MongoDB偷换的概念
MySql MongoDB
DataBase == DataBase
Table == Collection
Colunm == Field
Row == Documents

模块 pymongo

pip install pymongo

连接

新建一个文件 test_mongo.py

复制代码
import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

res = mongo_db.goods.find()
print(res)

插入数据

import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.insert_many([{"name" : "酸菜","price" : "1"},{"name" : "白菜","price" : "2"},{"name" : "小青菜","price" : "0.5"},])
print(res)

复制代码
import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.insert_many([{"name" : "酸菜","price" : "1"},{"name" : "白菜","price" : "2"},{"name" : "小青菜","price" : "0.5"},])
print(res)
复制代码

执行输出:

<pymongo.results.InsertManyResult object at 0x00000143817B3548>

查询数据

可以将结果转换为列表

import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.find()
print(list(res))
复制代码
import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.find()
print(list(res))
复制代码

执行输出:

[{'_id': ObjectId('5b991895e125324a58178dd3'), 'name': '酸菜', 'price': '1'}, {'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}, {'_id': ObjectId('5b991895e125324a58178dd5'), 'name': '小青菜', 'price': '0.5'}]

也可以对结果做for循环

import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.find()
for i in res:
    print(i)

执行输出:

{'_id': ObjectId('5b991895e125324a58178dd3'), 'name': '酸菜', 'price': '1'}
{'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}
{'_id': ObjectId('5b991895e125324a58178dd5'), 'name': '小青菜', 'price': '0.5'}

查询单条

import pymongo

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.find_one()
print(res)

由于_id是ObjectId对象,需要导入模块

import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建

# 插入多条数据
res = mongo_db.goods.find({"_id":ObjectId("5b991895e125324a58178dd5")})
for i in res:
    print(i)
# 插入多条数据
res = mongo_db.goods.insert_many([{"name" : "酸菜","price" : "1"},{"name" : "白菜","price" : "2"},{"name" : "小青菜","price" : "0.5"},])

执行输出:

{'_id': ObjectId('5b991895e125324a58178dd5'), 'name': '小青菜', 'price': '0.5'}

更新

import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建


res = mongo_db.goods.update_one({"name":"小青菜"},{"$set":{"price":2}})
print(res)
复制代码
import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建


res = mongo_db.goods.update_one({"name":"小青菜"},{"$set":{"price":2}})
print(res)

执行输出:

<pymongo.results.UpdateResult object at 0x000001AF61E332C8> None

删除

import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建


res = mongo_db.goods.delete_one({"name":"小青菜"})
print(res,res.raw_result)

执行输出:

<pymongo.results.DeleteResult object at 0x000001825B2134C8> {'n': 0, 'ok': 1.0}

排序

import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建


res = mongo_db.goods.find({}).skip(1).limit(2)
print(list(res))
复制代码
import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建


res = mongo_db.goods.find({}).skip(1).limit(2)
print(list(res))
复制代码

执行输出:

[{'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}]

进阶

import pymongo
from bson import ObjectId

# 连接数据库
mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建


res = mongo_db.goods.find({}).sort("age",pymongo.DESCENDING)
#
res = mongo_db.goods.find({}).sort("age",pymongo.DESCENDING).skip(1).limit(2)
print(list(res))

执行输出:

[{'_id': ObjectId('5b991895e125324a58178dd3'), 'name': '酸菜', 'price': '1'}, {'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}]
原文地址:https://www.cnblogs.com/zaizai1573/p/10743477.html