zoukankan      html  css  js  c++  java
  • MongoDB数据库

    一、CRUD操作

    1.数据库操作

    #创建
    use 数据库名字(有则进入,无责创建,如果新建的数据库没数据,show dbs 是不会显示新建的数据库的)
    
    #删除
    use 数据库名字  # 先切换到需要删除的库下
    db.dropDatabase()

    2.集合操作(表操作)

    #创建
    db user  # user为库名
    user  # 这里会显示库名
    db.user.insert({"name":"xy","age":18})  # 插入数据

    3.数据行,文档操作

    单条数据新增与查找

     

    多条数据新增与查找

    db.table1.find({name:"egon"})  # 查找名字等于egon的
    db.table1.find({name:{"$ne":"egon"}})  # 查找名字不等于egon的
    不等于:$ne
    大于:$gt
    小于:$lt
    大于等于:$gte
    小于等于::$lte
    # SQL:and,or,not
    # MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not"
    
    #1、select * from db1.user where id >= 2 and id < 4;
    db.user.find({'_id':{"$gte":2,"$lt":4}})
    
    #2、select * from db1.user where id >= 2 and age < 40;
    db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})
    
    #3、select * from db1.user where id >= 5 or name = "alex";
    db.user.find({
        "$or":[
            {'_id':{"$gte":5}},
            {"name":"alex"}
            ]
    })
    
    #4、select * from db1.user where id % 2=1;
    db.user.find({'_id':{"$mod":[2,1]}})
    
    #5、上题,取反
    db.user.find({'_id':{"$not":{"$mod":[2,1]}}})
    
    逻辑运算
    逻辑运算
    # SQL:in,not in
    # MongoDB:"$in","$nin"
    
    #1、select * from db1.user where age in (20,30,31);
    db.user.find({"age":{"$in":[20,30,31]}})
    
    #2、select * from db1.user where name not in ('alex','yuanhao');
    db.user.find({"name":{"$nin":['alex','yuanhao']}})
    成员运算
    #1、查看有dancing爱好的人
    db.user.find({'hobbies':'dancing'})
    
    #2、查看既有dancing爱好又有tea爱好的人
    db.user.find({
        'hobbies':{
            "$all":['dancing','tea']
            }
    })
    
    #3、查看第4个爱好为tea的人
    db.user.find({"hobbies.3":'tea'})
    
    #4、查看所有人最后两个爱好
    db.user.find({},{'hobbies':{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0})
    
    #5、查看所有人的第2个到第3个爱好
    db.user.find({},{'hobbies':{"$slice":[1,2]},"age":0,"_id":0,"name":0,"addr":0})
    
    > db.blog.find().pretty()
    {
            "_id" : 1,
            "name" : "alex意外死亡的真相",
            "comments" : [
                    {
                            "name" : "egon",
                            "content" : "alex是谁???",
                            "thumb" : 200
                    },
                    {
                            "name" : "wxx",
                            "content" : "我去,真的假的",
                            "thumb" : 300
                    },
                    {
                            "name" : "yxx",
                            "content" : "吃喝嫖赌抽,欠下两个亿",
                            "thumb" : 40
                    },
                    {
                            "name" : "egon",
                            "content" : "xxx",
                            "thumb" : 0
                    }
            ]
    }
    db.blog.find({},{'comments':{"$slice":-2}}).pretty() #查询最后两个
    db.blog.find({},{'comments':{"$slice":[1,2]}}).pretty() #查询1到2
    查询数组
    # 排序:--1代表升序,-1代表降序
    db.user.find().sort({"name":1,})
    db.user.find().sort({"age":-1,'_id':1}
    排序
    # 分页:--limit代表取多少个document,skip代表跳过前多少个document。 
    db.user.find().sort({'age':1}).limit(1).skip(2)
    分页
    # 获取数量
    db.user.count({'age':{"$gt":30}}) 
    
    --或者
    db.user.find({'age':{"$gt":30}}).count()
    获取数量

    4.修改

    db.user.update({'age':20},{"name":"Wxx","hobbies_count":3})  # 覆盖式的
    db.table1.update({'_id':2},{"$set":{"name":"WXX",}})  # 不覆盖
    db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})  # 没有匹配成功则新增一条{"upsert":true}
    db.user.update({'name':"alex"},{"$unset":{"hobbies":""}})  # 删除alex的爱好,$unset

    5.删除

    #1、删除多个中的第一个
    db.user.deleteOne({ 'age': 8 })
    
    #2、删除国家为China的全部
    db.user.deleteMany( {'addr.country': 'China'} ) 
    
    #3、删除全部
    db.user.deleteMany({})

    4.聚合操作

    如果你有数据存储在MongoDB中,你想做的可能就不仅仅是将数据提取出来那么简单了;你可能希望对数据进行分析并加以利用。MongoDB提供了以下聚合工具:
    #1、聚合框架
    #2、MapReduce(详见MongoDB权威指南)
    #3、几个简单聚合命令:count、distinct和group。(详见MongoDB权威指南)
    
    #聚合框架:
    可以使用多个构件创建一个管道,上一个构件的结果传给下一个构件。
    这些构件包括(括号内为构件对应的操作符):筛选($match)、投射($project)、分组($group)、排序($sort)、限制($limit)、跳过($skip)
    不同的管道操作符可以任意组合,重复使用

    5.pymongo的使用

    官网:http://api.mongodb.com/python/current/tutorial.html

    from pymongo import MongoClient
    
    #1、链接
    client=MongoClient('mongodb://root:123@localhost:27017/')
    # client = MongoClient('localhost', 27017)
    
    #2、use 数据库
    db=client['db2'] #等同于:client.db1
    
    #3、查看库下所有的集合
    print(db.collection_names(include_system_collections=False))
    
    #4、创建集合
    table_user=db['userinfo'] #等同于:db.user
    
    #5、插入文档
    import datetime
    user0={
        "_id":1,
        "name":"egon",
        "birth":datetime.datetime.now(),
        "age":10,
        'hobbies':['music','read','dancing'],
        'addr':{
            'country':'China',
            'city':'BJ'
        }
    }
    
    user1={
        "_id":2,
        "name":"alex",
        "birth":datetime.datetime.now(),
        "age":10,
        'hobbies':['music','read','dancing'],
        'addr':{
            'country':'China',
            'city':'weifang'
        }
    }
    # res=table_user.insert_many([user0,user1]).inserted_ids
    # print(res)
    # print(table_user.count())
    
    #6、查找
    
    # from pprint import pprint#格式化细
    # pprint(table_user.find_one())
    # for item in table_user.find():
    #     pprint(item)
    
    # print(table_user.find_one({"_id":{"$gte":1},"name":'egon'}))
    
    #7、更新
    table_user.update({'_id':1},{'name':'EGON'})
    
    #8、传入新的文档替换旧的文档
    table_user.save(
        {
            "_id":2,
            "name":'egon_xxx'
        }
    )

  • 相关阅读:
    如何输出高精度时间差
    GetThreadTimes获取其它线程cpu时间
    12-Python基础之类与面向对象
    10-Python函数之递归
    09-Python基础之内置函数与匿名函数
    08-Python基础之迭代器与生成器
    07-Python基础之装饰器
    06-Python基础之函数进阶(嵌套,作用域)
    05-Python基础之函数基础
    04-Python基础之文件操作基础
  • 原文地址:https://www.cnblogs.com/xiongying4/p/11953153.html
Copyright © 2011-2022 走看看