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

启动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:'',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:'',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','')
  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" } ] }

数据库角色

  1. 内建的角色
  2.  
  3. 数据库用户角色:readreadWrite;
  4. Read:允许用户读取指定数据库
  5. readWrite:允许用户读写指定数据库
  6.  
  7. 数据库管理角色:dbAdmindbOwneruserAdmin
  8. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查
  9.  
  10. 看统计或访问system.profile
  11. userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  12.  
  13. 集群管理角色:clusterAdminclusterManagerclusterMonitorhostManager
  14. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
  15.  
  16. 备份恢复角色:backuprestore
  17.  
  18. 所有数据库角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
  19. readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  20. readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  21. userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  22. dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  23.  
  24. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  25.  
  26. 内部角色:__system
  27.  
  28. 创建超级管理员需要未开启权限模式的情况下执行;
  29. 如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,在不验证权限的情况下,可以创建一个用户,当继续创建第二个用户时,会返回错误,若想继续创建用户则必须登录;
  30. 用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库

数据类型

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

Python操作Mongodb模块

  1. pip install pymongo
  2. or
  3. easy_install install pymongo

操作方式

连接Mongodb

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

添加数据

  1. first_name = ["陈","张","李","王","赵"]
  2. second_name = ["冰","鑫","程","爱","暖"]
  3. third_name = ["强","国","明","风","芬"]
  4. data = [
  5. {"_id":int(""+str(i)),
  6. "name":random.choice(first_name)+
  7. random.choice(second_name)+
  8. random.choice(third_name),
  9. "age":random.randint(16,60),
  10. "high":random.randint(170,190),
  11. "list":list(random.randint(1,200) for i in range(10))
  12. } for i in range(5)
  13. ]
  14. try:
  15. for record in data:
  16. collection.save(record)
  17. except pymongo.errors.DuplicateKeyError:
  18. print('record exists')
  19. except Exception as e:
  20. print(e)

删除数据

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

更新数据

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

查询数据

  1. print('\n------------身高小于180:')
  2. print(type(collection.find({'high':{'$lt':180}})))
  3. for row in collection.find({'high':{'$lt':180}}):
  4. print(row)
  5. print(type(collection.find_one({'high':{'$lt':180}})))
  6. print('use find_one:',collection.find_one({'high':{'$lt':180}})['high'])
  7. print('use find_one:',collection.find_one({'high':{'$lt':180}}))
  8.  
  9. print('\n------------查询特定键')
  10. print('------------查询身高大于170,并只列出_id,high和age字段(使用列表形式_id默认打印出来,可以使用{}忽视_id):')
  11. for row in collection.find({'high':{'$gt':170}},projection=['high','age']):
  12. print(row)
  13.  
  14. print('\n------------skip参数用法')
  15. for row in collection.find({'high':{'$gt':170}},['high','age'],skip=1):
  16. print(row)
  17. for row in collection.find({'high':{'$gt':170}},['high','age']).skip(1):
  18. print(row)
  19.  
  20. print('\n------------limit参数用法')
  21. for row in collection.find({'high':{'$gt':170}},['high','age'],limit=1):
  22. print(row)
  23.  
  24. print('\n------------用{}描述特定键')
  25. for row in collection.find({'high':{'$gt':170}},{'high':1,'age':1,'_id':False}):
  26. print(row)
  27.  
  28. print('\n------------多条件查询')
  29. print(collection.find_one({'high':{'$gt':10},'age':{'$lt':26,'$gt':10}}))
  30.  
  31. # for u in db.users.find({"age":{"$nin":(23, 26, 32)}}):
  32. # print u
  33. # select * from users where age not in (23, 26, 32)
  34.  
  35. print('\n------------count')
  36. print(collection.find({"age":{"$gt":20}}).count())
  37.  
  38. print('\n------------条件或')
  39. print('大于等于29或者小于23')
  40. for row in collection.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":29}}]}):
  41. print(row)
  42.  
  43. print('\n------------exists')
  44. for row in collection.find({'age':{'$exists':True}}):
  45. print('age exists',row) # select * from 集合名 where exists 键1
  46. for row in collection.find({'age':{'$exists':False}}):
  47. print('age not exists',row)
  48.  
  49. print('\n------------正则表达式查询')
  50. print('method 1')
  51. for row in collection.find({'name':{'$regex':r'.*暖.*'}}):
  52. print(row)
  53. print('method 2')
  54. import re
  55. Regex = re.compile(r'.*爱.*',re.IGNORECASE)
  56. for row in collection.find({'name':Regex}):
  57. print(row)
  58.  
  59. print('\n------------使用sort排序(文档中没有排序的字段也会打印出来,表示最小)')
  60. print('------------age 升序')
  61. for row in collection.find().sort([["age",pymongo.ASCENDING]]):
  62. print(row)
  63. print('------------age 降序')
  64. for row in collection.find().sort([("age",-1)]):
  65. print(row)
  66. print('------------age升序,high升序')
  67. for row in collection.find().sort((("age",pymongo.ASCENDING),("high",pymongo.ASCENDING))):
  68. print(row)
  69. print('------------age升序,high降序')
  70. for row in collection.find(sort=[("age",pymongo.ASCENDING),("high",pymongo.ASCENDING)]):
  71. print(row)
  72.  
  73. print('\n------------$all')
  74. for row in collection.find({'list':{'$all':[77,117,165,37,57,49,178,90,3,166]}}):
  75. print(row)
  76.  
  77. print('\n------------$in')
  78. for row in collection.find({'list':{'$in':[2,3,4]}}):
  79. print(row)
  80.  
  81. print('\n------------size=10')
  82. for row in collection.find({'list':{'$size':10}}):
  83. print(row)
  84.  
  85. # print('-------------------$unset')
  86. # print('$unset和$set相反表示移除文档属性')
  87. # print('---before')
  88. # for row in collection.find({'name': "张程芬"}):
  89. # print(row)
  90. # collection.update({'name':'张程芬'},{'$unset':{'age':1}})
  91. # print('---after')
  92. # for row in collection.find({'name':'张程芬'}):
  93. # print(row)

完整代码文件

  1. __author__ = 'Cq'
  2.  
  3. import pymongo
  4. import random
  5.  
  6. def add_data(collection):
  7. first_name = ["陈","张","李","王","赵"]
  8. second_name = ["冰","鑫","程","爱","暖"]
  9. third_name = ["强","国","明","风","芬"]
  10. data = [
  11. {"_id":int(""+str(i)),
  12. "name":random.choice(first_name)+
  13. random.choice(second_name)+
  14. random.choice(third_name),
  15. "age":random.randint(16,60),
  16. "high":random.randint(170,190),
  17. "list":list(random.randint(1,200) for i in range(10))
  18. } for i in range(5)
  19. ]
  20. try:
  21. for record in data:
  22. collection.save(record)
  23. except pymongo.errors.DuplicateKeyError:
  24. print('record exists')
  25. except Exception as e:
  26. print(e)
  27.  
  28. def delete_data(collection):
  29. remove_before = collection.find()
  30. print('---------------delete before--------------------')
  31. for obj in remove_before:
  32. print(obj)
  33.  
  34. collection.delete_many({'age':{'$gt':20,'$lt':30}}) #删除所有满足条件的文档,删除_id大于6,小于100
  35. collection.delete_one({'age':20}) #删除一条满足条件的文档,删除_id=6
  36. #collection_set01.delete_many({}) #删除整个集合
  37. remove_after = collection.find()
  38.  
  39. print('---------------delete after--------------------')
  40. for obj in remove_after:
  41. print(obj)
  42.  
  43. def update_data(collection):
  44. collection.replace_one({'_id': 10000}, {'name': '王宝宝'}) #replace_one用指定的key-value替代原来所有的key-value
  45. collection.update_one({"_id": {'$lt': 10008}}, {'$set': {"age": ""}}) #update_one更新已经对应的key-value,其它不变
  46. collection.update_many({'_id': {'$gt': 10007}}, {'$set': {'age': ''}}) #同上,能够update所有符合匹配条件的文档
  47.  
  48. def select_data(collection):
  49.  
  50. print('\n------------身高小于180:')
  51. print(type(collection.find({'high':{'$lt':180}})))
  52. for row in collection.find({'high':{'$lt':180}}):
  53. print(row)
  54. print(type(collection.find_one({'high':{'$lt':180}})))
  55. print('use find_one:',collection.find_one({'high':{'$lt':180}})['high'])
  56. print('use find_one:',collection.find_one({'high':{'$lt':180}}))
  57.  
  58. print('\n------------查询特定键')
  59. print('------------查询身高大于170,并只列出_id,high和age字段(使用列表形式_id默认打印出来,可以使用{}忽视_id):')
  60. for row in collection.find({'high':{'$gt':170}},projection=['high','age']):
  61. print(row)
  62.  
  63. print('\n------------skip参数用法')
  64. for row in collection.find({'high':{'$gt':170}},['high','age'],skip=1):
  65. print(row)
  66. for row in collection.find({'high':{'$gt':170}},['high','age']).skip(1):
  67. print(row)
  68.  
  69. print('\n------------limit参数用法')
  70. for row in collection.find({'high':{'$gt':170}},['high','age'],limit=1):
  71. print(row)
  72.  
  73. print('\n------------用{}描述特定键')
  74. for row in collection.find({'high':{'$gt':170}},{'high':1,'age':1,'_id':False}):
  75. print(row)
  76.  
  77. print('\n------------多条件查询')
  78. print(collection.find_one({'high':{'$gt':10},'age':{'$lt':26,'$gt':10}}))
  79.  
  80. # for u in db.users.find({"age":{"$nin":(23, 26, 32)}}):
  81. # print u
  82. # select * from users where age not in (23, 26, 32)
  83.  
  84. print('\n------------count')
  85. print(collection.find({"age":{"$gt":20}}).count())
  86.  
  87. print('\n------------条件或')
  88. print('大于等于29或者小于23')
  89. for row in collection.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":29}}]}):
  90. print(row)
  91.  
  92. print('\n------------exists')
  93. for row in collection.find({'age':{'$exists':True}}):
  94. print('age exists',row) # select * from 集合名 where exists 键1
  95. for row in collection.find({'age':{'$exists':False}}):
  96. print('age not exists',row)
  97.  
  98. print('\n------------正则表达式查询')
  99. print('method 1')
  100. for row in collection.find({'name':{'$regex':r'.*暖.*'}}):
  101. print(row)
  102. print('method 2')
  103. import re
  104. Regex = re.compile(r'.*爱.*',re.IGNORECASE)
  105. for row in collection.find({'name':Regex}):
  106. print(row)
  107.  
  108. print('\n------------使用sort排序(文档中没有排序的字段也会打印出来,表示最小)')
  109. print('------------age 升序')
  110. for row in collection.find().sort([["age",pymongo.ASCENDING]]):
  111. print(row)
  112. print('------------age 降序')
  113. for row in collection.find().sort([("age",-1)]):
  114. print(row)
  115. print('------------age升序,high升序')
  116. for row in collection.find().sort((("age",pymongo.ASCENDING),("high",pymongo.ASCENDING))):
  117. print(row)
  118. print('------------age升序,high降序')
  119. for row in collection.find(sort=[("age",pymongo.ASCENDING),("high",pymongo.ASCENDING)]):
  120. print(row)
  121.  
  122. print('\n------------$all')
  123. for row in collection.find({'list':{'$all':[77,117,165,37,57,49,178,90,3,166]}}):
  124. print(row)
  125.  
  126. print('\n------------$in')
  127. for row in collection.find({'list':{'$in':[2,3,4]}}):
  128. print(row)
  129.  
  130. print('\n------------size=10')
  131. for row in collection.find({'list':{'$size':10}}):
  132. print(row)
  133.  
  134. # print('-------------------$unset')
  135. # print('$unset和$set相反表示移除文档属性')
  136. # print('---before')
  137. # for row in collection.find({'name': "张程芬"}):
  138. # print(row)
  139. # collection.update({'name':'张程芬'},{'$unset':{'age':1}})
  140. # print('---after')
  141. # for row in collection.find({'name':'张程芬'}):
  142. # print(row)
  143.  
  144. def main():
  145. client = pymongo.MongoClient('192.168.198.128', 27017, username='guest', password='')
  146.  
  147. db = client.test
  148.  
  149. collection = db.test
  150.  
  151. add_data(collection)
  152.  
  153. update_data(collection)
  154.  
  155. select_data(collection)
  156.  
  157. delete_data(collection)
  158.  
  159. if "__main__" == __name__:
  160. main()

输出结果

  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,highage字段(使用列表形式_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': ''}
  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': ''}
  61. ------------age 降序
  62. {'_id': 10000, 'name': '王宝宝', 'age': ''}
  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': ''}
  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': ''}
  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': ''}
  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': ''}
  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]}

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

Python与Mongodb交互的更多相关文章

  1. python 与mongodb 交互

    创建管理员 1 > use admin 2 switched to db admin 3 > db 4 admin 5 > db.createUser({user:'admin',p ...

  2. python和mongodb简单交互

    python和mongodb简单交互 1.安装pymongo: pip3 install pymongo 2.pymongo的简单用法: # /usr/bin/env python3 import p ...

  3. python 与 mongodb的交互--更新操作

    这里只要讨论python与mongod交互的时候insert的问题: from pymongo import * def insert_func(): try: client_obj= MongoCl ...

  4. JSON 的正确用法:Python、MongoDB、JavaScript与AjaxJSON 的正确用法:Python、MongoDB、JavaScript与Ajax

    本文主要总结网站编写以来在传递 JSON 数据方面遇到的一些问题以及目前采用的解决方案.网站数据库采用 MongoDB,后端是 Python,前端采用“半分离”形式的 Riot.js,所谓半分离,是说 ...

  5. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  6. python 连 mongodb

    这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便 ...

  7. Python和Excel交互

    Python和Excel交互 使用的python包为XlsxWriter 下载的链接 https://pypi.python.org/pypi/XlsxWriter 初级的例子: def write_ ...

  8. python操作mongodb

    # python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...

  9. 使用Python操作MongoDB

    MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...

随机推荐

  1. BZOJ 2406: 矩阵 [上下界网络流 二分答案]

    2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...

  2. POJ 2311 Cutting Game [Multi-SG?]

    传送门 题意:n*m的纸片,一次切成两份,谁先切出1*1谁胜 Multi-SG? 不太一样啊 本题的要求是后继游戏中任意游戏获胜就可以了.... 这时候,如果游戏者发现某一单一游戏他必败他就不会再玩了 ...

  3. POJ置换群入门[3/3]

    POJ 3270 Cow Sorting 题意: 一个序列变为升序,操作为交换两个元素,代价为两元素之和,求最小代价 题解: 看了黑书... 首先循环因子分解 一个循环完成的最小代价要么是循环中最小元 ...

  4. adb模拟操作之event

    首语: 我们都知道,adb可以对模拟器和root过的真机进行很多操作,例如:模拟点击,输入,截图,手机和PC,数据互传等.这篇要说的就是adb操作模拟器或者真机的输入输出. 0x01 问题 使用adb ...

  5. 一、爬虫的基本体系和urllib的基本使用

    爬虫 网络是一爬虫种自动获取网页内容的程序,是搜索引擎的重要组成部分.网络爬虫为搜索引擎从万维网下载网页.一般分为传统爬虫和聚焦爬虫. 爬虫的分类 传统爬虫从一个或若干初始网页的URL开始,获得初始网 ...

  6. CocosCreator游戏开发---菜鸟学习之路(一)

    PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...

  7. python爬虫登录

    python3 urllib.request 网络请求操作 http://www.cnblogs.com/cocoajin/p/3679821.html python实现 爬取twitter用户姓名 ...

  8. Spring_Spring与DAO_Spring的Jdbc模板

    一.导入Jar包 二.定义实体类与DB表 public class Student { private Integer id; private String name; private int age ...

  9. js “top、clientTop、scrollTop、offsetTop…”

    当要做一些与位置相关的插件或效果的时候,像top.clientTop.scrollTop.offsetTop.scrollHeight.clientHeight.offsetParent...看到这么 ...

  10. Winform美化MessageBox

    现在在做的项目美工要求比较高,所以根据网上搜索的资料,自定义了一整套的弹出框,供大家参考,之网上其他大神有调用系统ICO的,容易导致异常,我在此使用本地资源ICO,效率高不异常.using Syste ...