1、启动mongodb
mongod 启动 查找db目录,默认是在 C:/data/db
更换目录启动:mongod --dbpath=D:\mongodb\data\db
[thread1] waiting for connections on port 27017 看到这句话,说明启动成功
默认端口:27017
2、mongodb的指令
show databases 查询当前服务器磁盘中的数据库
use dbname 切换或者在内存中创建数据库
当dbname 存在时切换
当dbname不存在时,在内存中创建数据库
show tables 查询当前数据库磁盘中的数据表(Collection) db 代表当前使用的数据库 查询当前使用的数据库名 db.tablename 查看或者创建当前数据库下的数据表(内存中)
MongoDB 使用了不存在的对象即创建该对象
3、数据类型
Object ID :Documents 自生成的 _id #不能被json
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类型,时间戳可以秒杀一切时间类型)
看着挺多的,但是真要是用的话,没那么复杂,很简单的哦
增加
db.tablename.insert() 增加数据 官方在3.2版本之后不推荐使用
db.tablename.insertOne({}) 增加单条数据
db.tablename.insertMany([{},{},{}]) 增加多条数据
存储数据的时候,尽可能降低IO操作,多使用catch缓存,可以提高程序的运行效率
查询
db.tabllename.find({}) 查找数据
db.tabllename.findOne({}) 查找符合条件的第一条数据
查询条件
并列条件{id:1,age:6}
修改
修改 Array Object==字典 Array+Object Object+ Array + Object
db,tablename.update() 修改数据 官方在3.2版本之后不推荐使用
db,tablename.updateOne({},{$修改器:{预修改值}}) 查找并更新符合条件的第一条数据
db,tablename.updateMany({},{$修改器:{预修改值}}) 查找并更新符合条件的所有数据
修改器:
$set 强制修改 {$set:{age:2}}
$inc 引用增加 {$inc:{age:1},$inc:{age:-1}}
$unset 删除字段 {$unset:{age:1}}
Array: #列表
$push 在Array中追加一个元素 {$push:{user_list:'hutu'}} 相当于append()
$push All 在Array中追加多个元素 {$pushAll:{user_list:'hutu,1,2,3,4,'}} 相当于extend
$pull 在Array中删除一条符合条件的数据,从前往后第一个 {$pull:{user_list:1}}
$pullAll 在Array中删除多条符合条件的数据,从前往后第一个 {$pull:{user_list:[1,2,3,4}}
$pop 在Array中删除最后一个或者第一个元素
{$pop:{user_list:1}} 删除第一个元素
{$pop:{user_list:-1}} 删除最后一个数据
举个栗子:
{name:1,hobby:[1,2,3,4,5,6]}
将6改为7
db.tablename.updateOne({hobby:6,name:1},{$set:{"hobby.$":7}})
将3从列表中删除
db.tablename.updateOne({hobby:6,name:1},{$pull:{"hobby.$":1}})
Array + Object:
{name:1,hobby:[{type:1,detail:"dance"},{type:2,detail:"sing"}]}
将 dance 改成 drink
b.tablename.updateOne({'hobby.detail':'dance'},{$set:{"hobby.$.detail":'drink'}})
删除
db.tablename.remove({}) 删除所有符合条件的数据 官方在3.2版本之后不推荐使用
db.tablename.deleteOne({}) 删除第一条符合条件的数据
db.tablename.deleteMany({}) 删除符合条件的所有数据
5、$
存储符合条件的所有下标索引
举个栗子:
{name:1,hobby:[1,2,3,4,5,6]}
将6改为7
db.tablename.updateOne({hobby:6,name:1},{$set:{"hobby.$":7}})
Array + Object:
{name:1,hobby:[{type:1,detail:"dance"},{type:2,detail:"sing"}]}
将 dance 改成 drink
b.tablename.updateOne({'hobby.detail':'dance'},{$set:{"hobby.$.detail":'drink'}})
6、$关键字
数学比较符:
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$ne 不等于
$eq 等于 {:在:不能使用或者是不代表等于的情况使用 $eq}
查询关键字
$or 或条件查询 name:1,age:6
db.tablename.find({name:1},{age:6})
$and 并列条件
db.tablename.findOne({$and:[{name:1},{age:6}]})
db.tablename.findOne({name:1},{age:6})
$in 或条件查询 相同字段的查询
db.tablename.find({age:{$in:[6,10,12]}})
//db.tablename.find({$or:[{age:6},{age:10},{age:12}]})
$all 查询子集或完全子集
{name:1,hobby:[1,2,3,4,5,6]}
db.tablename.findOne({hobby:{$all:[1,5,3]}}) 不存在顺序
//db.tablename.findOne({hobby:{$all:[1,3,7]}}) #查不出来,不是子集
1、sort
db.users.find({}).sorted({_id:1}) // 排序 1 正序 2 倒序
2、limit
db.users.find({}).limit(5) // 选取
db.users.find({}).limit(5).sort({_id:-1}) // 选取排序的逻辑顺序,先排序后选取
3、skip
db.users.find({}).skip(5) // 跳过
db.users.find({}).skip(5).sort({_id:-1}) // 跳过排序逻辑顺序:先排序 后跳过
混合用法
db.users.find({}).limit(5).skip(5) //逻辑顺序,先跳过再选取
db.users.find({}).limit(5).skip(5).sort({_id:-1}) // 排序跳过选取 逻辑顺序 1、先排序,2、跳过。3、选取
4、分页
db.users.find({}).limit(2).skip(0).sort({_id:-1}) // 第一页
db.users.find({}).limit(2).skip(2).sort({_id:-1}) // 第二页
db.users.find({}).limit(2).skip(4).sort({_id:-1}) // 第三页
db.users.find({}).limit(2).skip(6).sort({_id:-1}) // 第四页
db.users.find({}).limit(2).skip(8).sort({_id:-1}) // 第五页
7、高级版的PyMongo操作
from pymongo import MongoClient
mongo_client = MongoClient("127.0.0.1",27017)
db = mongo_client['hutong']
# 增加
res = db.info.insert_one/insert_many
res.inserted_id / res.inserted_ids
#查询
res = db.info.find({}) # <pymongo.cursor.Cursor object at 0x0000023A0F1BA630> 生成器对象
print(res)
res = list(db.info.find({}) )
print(len(res))
# 排序
import pymongo
res = db.info.find({}).sort("_id",-1) # 1 正序 -1 倒叙 排序与原生语法有差异 {_id:1},{id:-1}
# res = db.info.find({}).sort("_id",pymongo.DESCENDING) # 倒叙
print(list(res))
# limit
res = db.info.find({}).limit(4)
res_list = list(res)
print(res_list, len(res_list))
# skip
res = db.info.find({}).skip(4)
res_list = list(res)
print(res_list, len(res_list))
# 分页
res=db.info.find({}).limit(2).skip(2).sort("_id",-1)
res_list = list(res)
print(res_list, len(res_list))
# 删除
db.info.delete_one({})
db.info.delete_many({})
#修改
方式1:
res = db.info.update_one({"name":1,"hobby.detail":"sing"},{"$set":{"hobby.$.detail":'pashan'}})
print(res)
方式2:
res = db.info.find_one({"name": 1, "hobby.detail": "drink"})
print(res)
for index,item in enumerate(res.get("hobby")):
print(index,item)
if item.get("detail") == 'drink':
res["hobby"][index]["detail"] = "dance"
print(res)
db.info.update_one({"name": 1, "hobby.detail":"drink"}, {"$set":res})
来源:https://www.cnblogs.com/1915823-huxt/p/11061549.html