简单认识MongoDB

风流意气都作罢 提交于 2020-02-27 12:16:28

  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类型,时间戳可以秒杀一切时间类型)
    看着挺多的,但是真要是用的话,没那么复杂,很简单的哦

  4、增删改查

增加

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})

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!