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