美文网首页
mongodb简单应用

mongodb简单应用

作者: 清风徐来_简 | 来源:发表于2019-04-29 14:14 被阅读0次

注册mongodb数据库为服务(方便后续测试学习使用):
管理员打开cmd,执行
mongod.exe --dbpath=D:\install\MongoDB\data --logpath=D:\install\MongoDB\log\mongodb.log --install --serviceName "MongoDB"
--dbpath指的的mongodb安装路径,logpath指的是mongodb日志存放路径,--install --serviceName指的是安装成为系统服务,服务名称为 MongoDB

一、简单了解

  • 初步使用
    使用不存在的对象,即创建该对象
    > use my_db  --》创建数据库并且使用
    switched to db my_db
    > db    --》查询当前所在数据库
    my_db
    > db.my_collection  --》创建并使用collection
    my_db.my_collection
    > show dbs  --》 查询当前所有数据库(只创建,没数据,默认不显示,就是不存在)
    admin  0.000GB
    local  0.000GB
    
    use db1--》创建一个db1
    db.user.insert({id:1,name:"li",age:24})--》创建一个表,并插入一条数据
    db.user.find()--》查询数据
    { "_id" : ObjectId("5bc70768af328e86fb4fbe97"), "id" : 1, "name" : "li", "age" : 24 }
    
  • MongoDB结构:
    表         Collections  --》 user
    行         Documents    --》 {}
    字段       Fields       --》 id:1
    
  • 命令格式,db代指当前使用的数据库
    命令的格式:"db.表名(Collection).操作(参数)"
    
  • 数据在数据库的存储状态
          {
              ID:1,
              name:zhangsan,
              age:84,
              hobby:[吃,喝,玩]
          },
          {
              ID:2,
              name:wangmazi,
              age:73,
              hobby:[睡]
          },
          {
              ID:2,
              name:liuwu,
              age:73,
              hobby:[{
                  date:2018年10月17日,
                  name:"zhangsan"
                  }]
          }
    

二、基本增删改查

  • 插入
    废弃:db.user.insert([{}])--》插入一条或多条
    一条:db.user.insertOne({id:2,name:'hehe',age:18})
    多条:db.user.insertMany([{id:3},{id:4,user:'hihi'},{id:5,ade:23}])
    
  • 删除
    废弃:db.user.remove({id:3})--》符合条件的所有
    一条:db.user.deleteOne({})--》删除对象的查询条件
    多条:db.user.deleteMany({id:1})--》满足条件的多条数据
    
  • 清空
    db.user.deleteMany({})--》不写条件,整个表清空
    db.user.drop()
    
  • 更改
    废弃:db.user.update({},{$set:{}})
    一条:db.user.updateOne({id:3},{$set:{name:'张三'}})--》前面是查询条件,后面是更改字段,只改第一条
    多条:db.user.updateMany({id:3},{$set:{gender:'男',hobby:[1,2,3]}})--》可增加字段
    

    $set 修改器之一,设定,将某key设定为某值

  • 查询
    多条:db.user.find({age:18})--》查询符合条件的所有
    一条:db.user.findOne({name:'lala'})
    并列条件查询:
         db.user.findOne({name:'lala',age:18})--》并列条件
         db.user.find({id:3,$or: [{name:'lala',age:18}]})--》并列条件
    

三、基本数据类型

  • 数据类型概览
    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类型,时间戳可以秒杀一切时间类型)
    
  • ObjectId数据类型详解
    "_id" : ObjectId("5b151f8536406806ab2e6b26")
    
    哪个时间--》#"5b151f85" 代指的是时间戳,这条数据的产生时间
    哪个机器--》#"364068" 代指某台机器的机器码,存储这条数据时的机器编号
    哪个进程--》#"06ab" 代指进程ID,多进程存储数据的时候,非常有用的
    第几条数据--》#"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
    
    #以上四种标识符拼凑成世界上唯一的ObjectID
    #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
    #可以得到以上四种信息
    
    #注意:这个类型是不可以被JSON序列化的,可用下面方法转化成字符串,之后再序列化
    res = list(mongo_db.content.find({}))
    for index, item in enumerate(res):
        res[index]['_id'] = str(item['_id'])
    
    print(type(res[0]['_id'])) # <class 'str'>
    
    # 将字符串格式的转化为objectid数据类型
    from bson import ObjectId
    mongo_db.users.find_one({"_id": ObjectId(user_id)})
    

四、$关键字及$修改器

  • 含义:大于  小于   大于等于  小于等于     等于
         $gt    $lt    $gte     $lte    'age':18/$eq
    
    格式:db.user.find({'age':{$lt:20}})
    
  • $unset:
       删除某个字段
       db.user.updateOne({name:'lala'},{$unset:{hobby:0}})
    
    $inc:
       原有值基础上增加/数字增加,字符串拼接
       db.user.updateOne({name:'lala'},{$inc:{age:1}})
    
    $push:
       在Arrays中添加一个元素/没有该Arrays则直接添加
       db.user.updateOne({name:'lala'},{$push:{hobby:1}})
    
    $pull:
       在Arrays中删除元素/有重复的则全部删除
       db.user.updateOne({name:'lala'},{$pull:{hobby:1}})
    
    $pop:
       db.user.updateOne({name:'ddd'},{$pop:{hobby:1}})--》删除Arrays中的最后一个元素
       db.user.updateOne({name:'ddd'},{$pop:{hobby:-1}})--》删除Arrays中的第一个元素
    
  • $:存储 满足前置条件列表元素的下标索引
    更改Arrays中的某个值(根据定位修改)
    db.user.updateOne({name:'lala',hobby:'玩'},{$set:{'hobby.$':'学习}})
    db.user.updateOne({name:'lala'},{$set:{'hobby.1':'运动}})
    
    混搭:如果数组中放的是对象,要修改对象
        db.user.updateOne({name:'hehe'},{$set:{course:[
            {课程:'语文',分数:90},
            {课程:'数学',分数:100},
            {课程:'英语',分数:80},
          ]}})
    改:
        db.user.updateOne({name:'hehe','course.课程':'英语'},{$set:{'course.$.分数':85}})
    
    自增:
        db.user.updateOne({name:'hehe','course.课程':'英语'},{$inc:{'course.$.分数':5}})
    
  • 查询$关键字
    如果列表中是[1,2,3],用↓方法查询就找不到
    db.user.find({hobby:[3,2,1]})
    用↓方法就能找到
    db.user.find({hobby:{$all: [3,2,1]}})
    
    $all:满足所有元素的数据
    db.user.find({hobby:{$all: [1,2,3,4]}})--》没有4就不行
    
    $in:满足其中一个元素的数据
    db.user.find({hobby:{$in: [1,4]}})--》只要有1就行
    
    $or:满足其中一个字段的数据
    db.user.find({$or:[{'name':'lala'},{'user':'hihi'}]})
    

五、limit、sort、skip

  • limit:查询前几条
    db.user.find({}).limit(5)
    
  • skip:跳过第几条开始查询
    db.user.find({}).skip(2)
    
    可做分页:先执行skip,再执行limit
        db.user.find({}).skip(2).limit(3)
    
  • sort:按什么排序
    db.user.find({}).sort({ 'id':-1 })有大到小
    db.user.find({}).sort({ 'id':1 })有小到大
    

六、python操作mongodb

import pymongo
mongo_client = pymongo.MongoClient(host='127.0.0.1', port=27017)
mongo_db = mongo_client['db1']
  • 【查】*****************************************************************
    # find:
    res = mongo_db.content.find()
    print(res)  # <pymongo.cursor.Cursor object at 0x0000022EB277D6D8> 类似迭代器,用一次就没了。
    print(list(res))  # 【转成列表】
    for i in enumerate(list(res)):  # 【循环遍历】
        print(i)
        print(i[1])
        print(i[1].get('name'))
    
    # find_one:
    res = mongo_db.chat.find_one()
    print(res)
    print(res.get('_id'))  # 【字典可get取值】
    
    # find_one:
    res = mongo_db.user.find_one({'name':'lala'})
    print(res)
    
  • 【增】*****************************************************************
    # insert_one:
    res = mongo_db.chat.insert_one({})
    print(res,res.inserted_id,type(res.inserted_id))
    # <pymongo.results.InsertOneResult object at 0x00000206C10EE508> 5bcdc5122b12304cbc31ebaa  <class 'bson.objectid.ObjectId'>
    
    # insert_many:
    res = mongo_db.chat.insert_many([{},{},{}])
    print(res,res.inserted_ids)
    # <pymongo.results.InsertManyResult object at 0x000002771950E548>
    # [ObjectId('5bc7668c2b12302d44c0033a'), ObjectId('5bc7668c2b12302d44c0033b'), ObjectId('5bc7668c2b12302d44c0033c')]
    
  • 【改】*****************************************************************
    # update_one:
    res = mongo_db.users.update_one({'username':'user2'},{'$set':{'username':'哎呀妈呀脑瓜疼','gender':0}})
    print(res,dir(res))
    
    # update_many:
    res = mongo_db.user.update_many({'id':3},{'$set':{'age':20}})
    print(res,dir(res))
    
  • 【删】*****************************************************************
    # delete_one:
    res = mongo_db.user.delete_one({'name':'lala'})
    print(res,res.deleted_count)
    
    # delete_many:
    res = mongo_db.user.delete_many({})
    print(res,res.deleted_count)
    

七、设置过期时间

from pymongo import MongoClient
cli = MongoClient()
db = cli['test']  # 数据库
tbl = db['test_timer2']  # 表
tbl.create_index([("timer2", 1)], expireAfterSeconds=10)
# 【给这个字段设置一个过期时间,这个字段必须是utc时间,没有此字段的,或者此字段是其他数据类型的则无效】
# 【他是根据这个字段进行自动删除的】
from datetime import datetime
【方式一】
tbl.insert({"timer2": datetime.utcnow(), "user": "Hehehehe!"}) # 此条数据会自动删除

【方式二】
from time import strptime, time, mktime
t1 = strptime("2017/3/25 13:36:02", "%Y/%m/%d %H:%M:%S")
t2 = datetime.utcfromtimestamp(mktime(t1))
tbl.insert({"timer2": t2, "TT": 1})  #  此条数据会自动删除
cli.close()

tbl.insert({"timer2": 456, "CC": 12345}) # 此条数据不会自动删除


"""
创建索引和指定过期时间的方式类似,要注意的是过期时间的字段必须使用UTC时间,否则无法正常删除记录
因此指定过期时间删除虽然也可以起作用,但是不能确定删除时间非常精确。
"""

相关文章

网友评论

      本文标题:mongodb简单应用

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