zoukankan      html  css  js  c++  java
  • Python与Mongodb交互

    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统


    MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案


    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组


    下载安装

    1 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载
    2 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解压
    3 mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 将解压包拷贝到指定目录
    4 export PATH=<mongodb-install-directory>/bin:$PATH #<mongodb-install-directory> 为Mongo的安装路径,如本文的 /usr/local/mongodb 
    5 mkdir -p /data/db #创建数据库目录(启动指定--dbpath)

    配置文件

     1 mongod -f MongoDB.conf 指定配置文件(默认在/etc下寻找)
     2 
     3 基本配置
     4 systemLog:
     5 destination: file
     6 path: /usr/local/var/log/mongodb/mongo.log
     7 logAppend: true
     8 storage:
     9 dbPath: /usr/local/var/mongodb
    10 net:
    11 bindIp: 127.0.0.1
    12 port: 11811

    配置文件参数信息

     1 #数据库数据存放目录
     2 dbpath=/usr/local/mongodb304/data
     3 #数据库日志存放目录
     4 logpath=/usr/local/mongodb304/logs/mongodb.log 
     5 #以追加的方式记录日志
     6 logappend = true
     7 #端口号 默认为27017
     8 port=27017 
     9 #以后台方式运行进程
    10 fork=true 
    11 #开启用户认证
    12 auth=true
    13 #关闭http接口,默认关闭http端口访问
    14 nohttpinterface=true
    15 #mongodb所绑定的ip地址
    16 bind_ip = 127.0.0.1 
    17 #启用日志文件,默认启用
    18 journal=true 
    19 #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
    20 quiet=true 
    21 
    22 
    23 其他配置参数含义
    24 
    25 --quiet    # 安静输出
    26 --port arg    # 指定服务端口号,默认端口27017
    27 --bind_ip arg    # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
    28 --logpath arg    # 指定MongoDB日志文件,注意是指定文件不是目录
    29 --logappend    # 使用追加的方式写日志
    30 --pidfilepath arg    # PID File 的完整路径,如果没有设置,则没有PID文件
    31 --keyFile arg    # 集群的私钥的完整路径,只对于Replica Set 架构有效
    32 --unixSocketPrefix arg    # UNIX域套接字替代目录,(默认为 /tmp)
    33 --fork    # 以守护进程的方式运行MongoDB,创建服务器进程
    34 --auth    # 启用验证
    35 --cpu    # 定期显示CPU的CPU利用率和iowait
    36 --dbpath arg    # 指定数据库路径
    37 --diaglog arg    # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
    38 --directoryperdb    # 设置每个数据库将被保存在一个单独的目录
    39 --journal    # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
    40 --journalOptions arg    # 启用日志诊断选项
    41 --ipv6    # 启用IPv6选项
    42 --jsonp    # 允许JSONP形式通过HTTP访问(有安全影响)
    43 --maxConns arg    # 最大同时连接数 默认2000
    44 --noauth    # 不启用验证
    45 --nohttpinterface    # 关闭http接口,默认关闭27018端口访问
    46 --noprealloc    # 禁用数据文件预分配(往往影响性能)
    47 --noscripting    # 禁用脚本引擎
    48 --notablescan    # 不允许表扫描
    49 --nounixsocket    # 禁用Unix套接字监听
    50 --nssize arg (=16)    # 设置信数据库.ns文件大小(MB)
    51 --objcheck    # 在收到客户数据,检查的有效性,
    52 --profile arg    # 档案参数 0=off 1=slow, 2=all
    53 --quota    # 限制每个数据库的文件数,设置默认为8
    54 --quotaFiles arg    # number of files allower per db, requires --quota
    55 --rest    # 开启简单的rest API
    56 --repair    # 修复所有数据库run repair on all dbs
    57 --repairpath arg    # 修复库生成的文件的目录,默认为目录名称dbpath
    58 --slowms arg (=100)    # value of slow for profile and console log
    59 --smallfiles    # 使用较小的默认文件
    60 --syncdelay arg (=60)    # 数据写入磁盘的时间秒数(0=never,不推荐)
    61 --sysinfo    # 打印一些诊断系统信息
    62 --upgrade    # 如果需要升级数据库
    63 
    64 
    65 主/从参数
    66 -------------------------------------------------------------------------
    67 --master    # 主库模式
    68 --slave    # 从库模式
    69 --source arg    # 从库 端口号
    70 --only arg    # 指定单一的数据库复制
    71 --slavedelay arg    # 设置从库同步主库的延迟时间
    72 
    73 
    74 Replicaton 参数
    75 --------------------------------------------------------------------------------
    76 --fastsync    # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
    77 --autoresync    # 如果从库与主库同步数据差得多,自动重新同步,
    78 --oplogSize arg    # 设置oplog的大小(MB)
    View Code

    启动mongodb

    1 ./mongod --dbpath=/data/db -f MongoDB.conf --rest
    2 # 默认端口为:27017
    3 # MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest
    4 # MongoDB 的 Web 界面访问端口比服务的端口多1000。如果你的#MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017

    连接mongodb

    1 # sudo mongo
    2 # sudo mongo --port 11811
    3 # sudo mongo -u root -p pwd 127.0.0.1:11811/test

    创建管理员

     1 > use admin 
     2 switched to db admin
     3 > db
     4 admin
     5 > db.createUser({user:'admin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
     6 Successfully added user: {
     7     "user" : "admin",
     8     "roles" : [
     9         {
    10             "role" : "userAdminAnyDatabase",
    11             "db" : "admin"
    12         }
    13     ]
    14 }
    15 > exit        

    创建普通用户

     1 > use mydb
     2 switched to db mydb
     3 > db.createUser({user:'guest',pwd:'123456',roles:[{role:'readWrite',db:'mydb'}]})
     4 Successfully added user: {
     5     "user" : "guest",
     6     "roles" : [
     7         {
     8             "role" : "readWrite",
     9             "db" : "mydb"
    10         }
    11     ]
    12 }
    13 > db.auth('guest','123456')
    14 1    

    删除用户

    1 > db.dropUser("guest")
    2 true

    查看存在用户

    1 > db.system.users.find()
    2 { "_id" : "admin.suoning", "user" : "suoning", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "jykZ+hm5QLhfPDKvcOWyZw==", "storedKey" : "uBr5nVjGLGYq0EdKyosDYOl3HA8=", "serverKey" : "S58tTedpS0QvvxanautLsKXc/OY=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
    3 { "_id" : "admin.guest", "user" : "guest", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "+pf1zZC1jaiM+GOMZs5qOg==", "storedKey" : "0ul1QMSdcEwwPVB5cq/GriwarCQ=", "serverKey" : "DLLEWO+NAwUd1nwnmLSp3tFpq/8=" } }, "roles" : [ { "role" : "readWrite", "db" : "mydb" } ] }
    4 { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "treTBfONTUztxZLy1AU9XA==", "storedKey" : "0IsEBotj0WzElFbzv3CuNRiVix8=", "serverKey" : "gNDkhP+U0ML4P0TGf0pI+F3w3/8=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }

    数据库角色

    内建的角色
    
    数据库用户角色:read、readWrite;
    Read:允许用户读取指定数据库
    readWrite:允许用户读写指定数据库
    
    数据库管理角色:dbAdmin、dbOwner、userAdmin;
    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查
    
    看统计或访问system.profile
    userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
    
    集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 
    
    备份恢复角色:backup、restore;
    
    所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
    
    超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    
    内部角色:__system
    
    
    创建超级管理员需要未开启权限模式的情况下执行;
    如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,在不验证权限的情况下,可以创建一个用户,当继续创建第二个用户时,会返回错误,若想继续创建用户则必须登录;
    用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库
    View Code

    数据类型

    数据类型    描述
    String    字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
    Integer    整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
    Boolean    布尔值。用于存储布尔值(真/假)。
    Double    双精度浮点值。用于存储浮点值。
    Min/Max keys    将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
    Arrays    用于将数组或列表或多个值存储为一个键。
    Timestamp    时间戳。记录文档修改或添加的具体时间。
    Object    用于内嵌文档。
    Null    用于创建空值。
    Symbol    符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date    日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
    Object ID    对象 ID。用于创建文档的 ID。
    Binary Data    二进制数据。用于存储二进制数据。
    Code    代码类型。用于在文档中存储 JavaScript 代码。
    Regular expression    正则表达式类型。用于存储正则表达式。
    View Code

    Python操作Mongodb模块

    1 pip install pymongo 
    2 or 
    3 easy_install install pymongo

    操作方式

    连接Mongodb

    import pymongo
    
    # 建立MongoDB数据库连接
    # connection = pymongo.Connection('192.168.198.128', 27017)
    
    # 如果设置了权限,注意xxx用户权限要可以cover到后面使用到的数据库
    # client = pymongo.MongoClient('192.168.198.128', 27017, username='guest', password='123456')
    client = pymongo.MongoClient('192.168.198.128',27017)
    
    # 连接所需数据库,test为数据库名
    db=client.test
    # db_name = 'test'
    # db = client[db_name]
    
    # 连接所用集合,也就是我们通常所说的表,test为表名
    # db和collection都是延时创建的,在添加Document时才真正创建
    collection=db.test

    添加数据

    first_name = ["","","","",""]
    second_name = ["","","","",""]
    third_name = ["","","","",""]
    data = [
        {"_id":int("1000"+str(i)),
         "name":random.choice(first_name)+
                random.choice(second_name)+
                random.choice(third_name),
         "age":random.randint(16,60),
         "high":random.randint(170,190),
         "list":list(random.randint(1,200) for i in range(10))
        } for i in range(5)
    ]
    try:
        for record in data:
            collection.save(record)
    except pymongo.errors.DuplicateKeyError:
        print('record exists')
    except Exception as e:
        print(e)


    删除数据

    collection.delete_many({'age':{'$gt':20,'$lt':30}})   #删除所有满足条件的文档,删除_id大于6,小于100
    collection.delete_one({'age':20})                     #删除一条满足条件的文档,删除_id=6
    #collection_set01.delete_many({})                     #删除整个集合

    更新数据

    collection.replace_one({'_id': 10000}, {'name': '王宝宝'})                         #replace_one用指定的key-value替代原来所有的key-value
    collection.update_one({"_id": {'$lt': 10008}}, {'$set': {"age": "19"}})           #update_one更新已经对应的key-value,其它不变
    collection.update_many({'_id': {'$gt': 10007}}, {'$set': {'age': '50'}})          #同上,能够update所有符合匹配条件的文档

    查询数据

    print('
    ------------身高小于180:')
    print(type(collection.find({'high':{'$lt':180}})))
    for row in collection.find({'high':{'$lt':180}}):
        print(row)
    print(type(collection.find_one({'high':{'$lt':180}})))
    print('use find_one:',collection.find_one({'high':{'$lt':180}})['high'])
    print('use find_one:',collection.find_one({'high':{'$lt':180}}))
    
    print('
    ------------查询特定键')
    print('------------查询身高大于170,并只列出_id,high和age字段(使用列表形式_id默认打印出来,可以使用{}忽视_id):')
    for row in collection.find({'high':{'$gt':170}},projection=['high','age']):
        print(row)
    
    print('
    ------------skip参数用法')
    for row in collection.find({'high':{'$gt':170}},['high','age'],skip=1):
        print(row)
    for row in collection.find({'high':{'$gt':170}},['high','age']).skip(1):
        print(row)
    
    print('
    ------------limit参数用法')
    for row in collection.find({'high':{'$gt':170}},['high','age'],limit=1):
        print(row)
    
    print('
    ------------用{}描述特定键')
    for row in collection.find({'high':{'$gt':170}},{'high':1,'age':1,'_id':False}):
        print(row)
    
    print('
    ------------多条件查询')
    print(collection.find_one({'high':{'$gt':10},'age':{'$lt':26,'$gt':10}}))
    
    
    # for u in db.users.find({"age":{"$nin":(23, 26, 32)}}):
    # print u
    # select * from users where age not in (23, 26, 32)
    
    print('
    ------------count')
    print(collection.find({"age":{"$gt":20}}).count())
    
    print('
    ------------条件或')
    print('大于等于29或者小于23')
    for row in collection.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":29}}]}):
        print(row)
    
    print('
    ------------exists')
    for row in collection.find({'age':{'$exists':True}}):
        print('age exists',row) # select * from 集合名 where exists 键1
    for row in collection.find({'age':{'$exists':False}}):
        print('age not exists',row)
    
    print('
    ------------正则表达式查询')
    print('method 1')
    for row in collection.find({'name':{'$regex':r'.*暖.*'}}):
        print(row)
    print('method 2')
    import re
    Regex = re.compile(r'.*爱.*',re.IGNORECASE)
    for row in collection.find({'name':Regex}):
        print(row)
    
    print('
    ------------使用sort排序(文档中没有排序的字段也会打印出来,表示最小)')
    print('------------age 升序')
    for row in collection.find().sort([["age",pymongo.ASCENDING]]):
        print(row)
    print('------------age 降序')
    for row in collection.find().sort([("age",-1)]):
        print(row)
    print('------------age升序,high升序')
    for row in collection.find().sort((("age",pymongo.ASCENDING),("high",pymongo.ASCENDING))):
        print(row)
    print('------------age升序,high降序')
    for row in collection.find(sort=[("age",pymongo.ASCENDING),("high",pymongo.ASCENDING)]):
        print(row)
    
    print('
    ------------$all')
    for row in collection.find({'list':{'$all':[77,117,165,37,57,49,178,90,3,166]}}):
        print(row)
    
    print('
    ------------$in')
    for row in collection.find({'list':{'$in':[2,3,4]}}):
        print(row)
    
    print('
    ------------size=10')
    for row in collection.find({'list':{'$size':10}}):
        print(row)
        
        
    # print('-------------------$unset')
    # print('$unset和$set相反表示移除文档属性')
    # print('---before')
    # for row in collection.find({'name': "张程芬"}):
    #     print(row)
    # collection.update({'name':'张程芬'},{'$unset':{'age':1}})
    # print('---after')
    # for row in collection.find({'name':'张程芬'}):
    #     print(row)

     完整代码文件

    __author__ = 'Cq'
    
    import pymongo
    import random
    
    
    
    def add_data(collection):
        first_name = ["","","","",""]
        second_name = ["","","","",""]
        third_name = ["","","","",""]
        data = [
            {"_id":int("1000"+str(i)),
             "name":random.choice(first_name)+
                    random.choice(second_name)+
                    random.choice(third_name),
             "age":random.randint(16,60),
             "high":random.randint(170,190),
             "list":list(random.randint(1,200) for i in range(10))
            } for i in range(5)
        ]
        try:
            for record in data:
                collection.save(record)
        except pymongo.errors.DuplicateKeyError:
            print('record exists')
        except Exception as e:
            print(e)
    
    
    def delete_data(collection):
        remove_before = collection.find()
        print('---------------delete before--------------------')
        for obj in remove_before:
            print(obj)
    
        collection.delete_many({'age':{'$gt':20,'$lt':30}})   #删除所有满足条件的文档,删除_id大于6,小于100
        collection.delete_one({'age':20})                     #删除一条满足条件的文档,删除_id=6
        #collection_set01.delete_many({})                     #删除整个集合
        remove_after = collection.find()
    
        print('---------------delete after--------------------')
        for obj in remove_after:
            print(obj)
    
    
    def update_data(collection):
        collection.replace_one({'_id': 10000}, {'name': '王宝宝'})                         #replace_one用指定的key-value替代原来所有的key-value
        collection.update_one({"_id": {'$lt': 10008}}, {'$set': {"age": "19"}})           #update_one更新已经对应的key-value,其它不变
        collection.update_many({'_id': {'$gt': 10007}}, {'$set': {'age': '50'}})          #同上,能够update所有符合匹配条件的文档
    
    
    
    def select_data(collection):
    
        print('
    ------------身高小于180:')
        print(type(collection.find({'high':{'$lt':180}})))
        for row in collection.find({'high':{'$lt':180}}):
            print(row)
        print(type(collection.find_one({'high':{'$lt':180}})))
        print('use find_one:',collection.find_one({'high':{'$lt':180}})['high'])
        print('use find_one:',collection.find_one({'high':{'$lt':180}}))
    
        print('
    ------------查询特定键')
        print('------------查询身高大于170,并只列出_id,high和age字段(使用列表形式_id默认打印出来,可以使用{}忽视_id):')
        for row in collection.find({'high':{'$gt':170}},projection=['high','age']):
            print(row)
    
        print('
    ------------skip参数用法')
        for row in collection.find({'high':{'$gt':170}},['high','age'],skip=1):
            print(row)
        for row in collection.find({'high':{'$gt':170}},['high','age']).skip(1):
            print(row)
    
        print('
    ------------limit参数用法')
        for row in collection.find({'high':{'$gt':170}},['high','age'],limit=1):
            print(row)
    
        print('
    ------------用{}描述特定键')
        for row in collection.find({'high':{'$gt':170}},{'high':1,'age':1,'_id':False}):
            print(row)
    
        print('
    ------------多条件查询')
        print(collection.find_one({'high':{'$gt':10},'age':{'$lt':26,'$gt':10}}))
    
    
        # for u in db.users.find({"age":{"$nin":(23, 26, 32)}}):
        # print u
        # select * from users where age not in (23, 26, 32)
    
        print('
    ------------count')
        print(collection.find({"age":{"$gt":20}}).count())
    
        print('
    ------------条件或')
        print('大于等于29或者小于23')
        for row in collection.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":29}}]}):
            print(row)
    
        print('
    ------------exists')
        for row in collection.find({'age':{'$exists':True}}):
            print('age exists',row) # select * from 集合名 where exists 键1
        for row in collection.find({'age':{'$exists':False}}):
            print('age not exists',row)
    
        print('
    ------------正则表达式查询')
        print('method 1')
        for row in collection.find({'name':{'$regex':r'.*暖.*'}}):
            print(row)
        print('method 2')
        import re
        Regex = re.compile(r'.*爱.*',re.IGNORECASE)
        for row in collection.find({'name':Regex}):
            print(row)
    
        print('
    ------------使用sort排序(文档中没有排序的字段也会打印出来,表示最小)')
        print('------------age 升序')
        for row in collection.find().sort([["age",pymongo.ASCENDING]]):
            print(row)
        print('------------age 降序')
        for row in collection.find().sort([("age",-1)]):
            print(row)
        print('------------age升序,high升序')
        for row in collection.find().sort((("age",pymongo.ASCENDING),("high",pymongo.ASCENDING))):
            print(row)
        print('------------age升序,high降序')
        for row in collection.find(sort=[("age",pymongo.ASCENDING),("high",pymongo.ASCENDING)]):
            print(row)
    
        print('
    ------------$all')
        for row in collection.find({'list':{'$all':[77,117,165,37,57,49,178,90,3,166]}}):
            print(row)
    
        print('
    ------------$in')
        for row in collection.find({'list':{'$in':[2,3,4]}}):
            print(row)
    
        print('
    ------------size=10')
        for row in collection.find({'list':{'$size':10}}):
            print(row)
    
    
        # print('-------------------$unset')
        # print('$unset和$set相反表示移除文档属性')
        # print('---before')
        # for row in collection.find({'name': "张程芬"}):
        #     print(row)
        # collection.update({'name':'张程芬'},{'$unset':{'age':1}})
        # print('---after')
        # for row in collection.find({'name':'张程芬'}):
        #     print(row)
    
    
    
    def main():
        client = pymongo.MongoClient('192.168.198.128', 27017, username='guest', password='123456')
    
        db = client.test
    
        collection = db.test
    
        add_data(collection)
    
        update_data(collection)
    
        select_data(collection)
    
        delete_data(collection)
    
    
    if "__main__" == __name__:
        main()
    View Code

    输出结果

     1 ------------身高小于180:
     2 <class 'pymongo.cursor.Cursor'>
     3 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
     4 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
     5 <class 'dict'>
     6 use find_one: 172
     7 use find_one: {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
     8 
     9 ------------查询特定键
    10 ------------查询身高大于170,并只列出_id,high和age字段(使用列表形式_id默认打印出来,可以使用{}忽视_id):
    11 {'_id': 10001, 'age': 21, 'high': 186}
    12 {'_id': 10002, 'age': 24, 'high': 172}
    13 {'_id': 10004, 'age': 41, 'high': 182}
    14 
    15 ------------skip参数用法
    16 {'_id': 10002, 'age': 24, 'high': 172}
    17 {'_id': 10004, 'age': 41, 'high': 182}
    18 {'_id': 10002, 'age': 24, 'high': 172}
    19 {'_id': 10004, 'age': 41, 'high': 182}
    20 
    21 ------------limit参数用法
    22 {'_id': 10001, 'age': 21, 'high': 186}
    23 
    24 ------------用{}描述特定键
    25 {'age': 21, 'high': 186}
    26 {'age': 24, 'high': 172}
    27 {'age': 41, 'high': 182}
    28 
    29 ------------多条件查询
    30 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    31 
    32 ------------count
    33 4
    34 
    35 ------------条件或
    36 大于等于29或者小于23
    37 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    38 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    39 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    40 
    41 ------------exists
    42 age exists {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    43 age exists {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    44 age exists {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    45 age exists {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    46 age exists {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    47 
    48 ------------正则表达式查询
    49 method 1
    50 method 2
    51 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    52 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    53 
    54 ------------使用sort排序(文档中没有排序的字段也会打印出来,表示最小)
    55 ------------age 升序
    56 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    57 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    58 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    59 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    60 {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    61 ------------age 降序
    62 {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    63 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    64 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    65 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    66 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    67 ------------age升序,high升序
    68 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    69 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    70 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    71 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    72 {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    73 ------------age升序,high降序
    74 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    75 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    76 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    77 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    78 {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    79 
    80 ------------$all
    81 
    82 ------------$in
    83 
    84 ------------size=10
    85 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    86 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    87 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    88 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    89 ---------------delete before--------------------
    90 {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    91 {'_id': 10001, 'name': '王鑫风', 'age': 21, 'high': 186, 'list': [133, 19, 191, 74, 113, 39, 95, 149, 91, 103]}
    92 {'_id': 10002, 'name': '赵爱风', 'age': 24, 'high': 172, 'list': [37, 116, 190, 120, 15, 101, 95, 159, 43, 34]}
    93 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    94 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    95 ---------------delete after--------------------
    96 {'_id': 10000, 'name': '王宝宝', 'age': '19'}
    97 {'_id': 10003, 'name': '李爱风', 'age': 31, 'high': 170, 'list': [170, 167, 197, 184, 58, 83, 79, 122, 149, 11]}
    98 {'_id': 10004, 'name': '李程明', 'age': 41, 'high': 182, 'list': [122, 1, 80, 145, 151, 114, 143, 56, 122, 100]}
    View Code

     参考博客https://www.cnblogs.com/diaosir/p/6507178.html

  • 相关阅读:
    Tomcat+Nginx+Linux+Mysql部署豆瓣TOP250的项目到腾讯云服务器
    使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示
    环境搭建-CentOS集群搭建
    环境搭建-Hadoop集群搭建
    ELK搭建实时日志分析平台
    Flume和Kafka完成实时数据的采集
    Python日志产生器
    腐竹木耳炒肉
    [转]Apple耳机兼容非Mac设置
    文件及文件夹操作
  • 原文地址:https://www.cnblogs.com/cq146637/p/8082163.html
Copyright © 2011-2022 走看看