当前位置: 首页 > news >正文

mangodb的存储

 

mongodb基本命令

mongo #进入mongo命令行
show dbs #查看所有数据库 use tutorial #切换到名为tutorial的数据库 show collections #查看数据库下的所有集合,例如集合名为QuoteItem db. QuoteItem.
find() #查看集合QuoteItem下的所有数据

 

 

1. 插入数据

import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)  # 连接数据库
db=client.test   #指定数据库
collection = db.students   #指定集合,相当于数据表

student1 = {
        'id': '20170102',
        'name': 'lilei',
        'age': 24,
        'gender':'female'
}

student2 = {
        'id': '20170302',
        'name': 'hong',
        'age': 20,
        'gender':'male'
}

# 插入一条数据 #result1
= collection.insert_one(student1)

# 插入多条数据 result2
= collection.insert_many([student1, student2]) #print(result1) #print(result1.inserted_id) #获得_id print(result2) print(result2.inserted_ids) #获得_id列表

注意

1. 插入一条和插入多条不能同时写入,否则会ID冲突的报错

2. 在mongoDB中,每条数据都有一个_id属性来唯一标识。如果没有显示指明该属性,mongodb会自动产生一个ObjectId类型的_id属性

 

 

 

2. 查询

from bson.objectid import ObjectId
import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)
db=client.test
collection = db.students

#find_one()查询一条数据 result1
= collection.find_one({'name': 'hong'}) result2 = collection.find_one({'_id': ObjectId('5b4ef71ea5979a113cfa8bc0')})

# find()用来查询多条数据,返回类型是cursor的一种生成器 result3
= collection.find({'age':20})
# 查询年龄大于20的数据 result4
= collection.find({'age': {'$gt': 20}})
# 查询名字以h开头的数据 result5
= collection.find({'name': {'$regex': '^h.*'}}) print(type(result1)) print(result1) print(result2) print(result3) for result in result3: print(result) for result in result4: print(result) print("\n正则匹配") for result in result5: print(result)

 

2.1 比较符号

符号含义示例
$lt小于{'age': {'$lt': 20}}
$gt大于{'age': {'$gt': 20}}
$lte小于等于{'age': {'$lte': 20}}
$gte大于等于{'age': {'$gte': 20}}
$ne不等于{'age': {'$ne': 20}}
$in在范围内{'age': {'$in': [20, 23]}}
$nin不在范围内{'age': {'$nin': [20, 23]}}

  

 2.2 功能符号

符号含义示例示例含义
$regex匹配正则表达式{'name': {'$regex': '^M.*'}}name以M开头
$exists属性是否存在{'name': {'$exists': True}}name属性存在
$type类型判断{'age': {'$type': 'int'}}age的类型为int
$mod数字模操作{'age': {'$mod': [5, 0]}}年龄模5余0
$text文本查询{'$text': {'$search': 'Mike'}}text类型的属性中包含Mike字符串
$where高级条件查询{'$where': 'obj.fans_count == obj.follows_count'}自身粉丝数等于关注数

 

  更详细的用法可到官方文档找到:https://docs.mongodb.com/manual/reference/operator/query/

 

 

 

 

3. 计数,排序,偏移

import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)
db=client.test
collection = db.students

# 一共有多少条数据的计数
count1 = collection.find().count()
print(count1)

# 符合某个条件的数据的计数
count2 = collection.find({'age': 20}).count()
print(count2)

#排序,按年龄升序; 降序的话用DESCENDING
result1 = collection.find().sort('age', pymongo.ASCENDING)
print([result['age'] for result in result1])


# 按年龄升序排序,从第4个数据开始输出
result2 = collection.find().sort('name', pymongo.ASCENDING).skip(3)

# 按年龄升序排序,从第4个数据开始输出,并且限制输出2条数据
result3 = collection.find().sort('name', pymongo.ASCENDING).skip(3).limit(2)

print([result['name'] for result in result2])
print([result['name'] for result in result3])

 

 

 

 

4. 更新

4.1 update_one()更新一条数据

import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)
db=client.test
collection = db.students

condition = {'name':'hong'} #定义一个按条件查找的变量

#按条件找出数据并修改
student = collection.find_one(condition)
student['name'] = 'hong123'

#使用update_one()更新一个数据
result = collection.update_one(condition,  {'$set':student})

print(result)
#调用matched_count和modified_count属性获得匹配的数据条目和影响的数据条目
print(result.matched_count, result.modified_count)

 

注意:

$set的作用是只更新student字典内存在的字段,如果原先还有其他字段,则不会更新,也不会删除。

如果不用$set的话,则会把之前的数据全部用student字典替换,如果原本存在其他字段,则会被删除

 

4.2  update_many() 更新多条数据

import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)
db=client.test
collection = db.students

condition = {'age':20}
#condition = {'age': {'$gt': 20}} 年龄大于20的

# {'$inc': {'age': 1}}这里表示age=20的数据全部加1,也就是改为21
result = collection.update_many(condition,  {'$inc': {'age': 1}})

print(result)
print(result.matched_count, result.modified_count)

 

 

 

5. 删除

from bson.objectid import ObjectId
import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)
db=client.test
collection = db.students


#result1 = collection.remove({'_id': ObjectId('5b4ef71ea5979a113cfa8bc0')})
#result2 = collection.delete_one({'name': 'hong'})
result3 = collection.delete_many({'age': {'$lt':25})


#print(result1)
print(result3.deleted_count)

 

传统的方式是用remove(),可删除符合条件的一个或者多个数据

新的方式是用delete_one() 删除一条数据,delete_many() 删除多条数据,这种方法可用deleted_count属性来获取删除的数据条目

 

转载于:https://www.cnblogs.com/regit/p/9337101.html

相关文章:

  • DICOM文件添加私有Tag(DCMTK Private Tag)
  • unity中NavMeshAgent有关知识
  • Linux C语言编程基本原理与实践
  • JavaScript开篇-写法分类
  • Selenium学习之==Css Selector使用方法
  • HashMap实现原理及源码分析
  • 语言分类
  • 冒泡排序实现
  • UAC 实现原理及绕过方法-打洞专用
  • 史上几大浏览器所用的内核名称
  • 【FTP】FTP服务器的搭建
  • .net 设置默认首页
  • python进程数据隔离,守护进程,锁,信号量和事件
  • 【视频】设计模式(C++)视频讲解
  • leetcode657 C++ 16ms 判断回环
  • SegmentFault for Android 3.0 发布
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [译] 怎样写一个基础的编译器
  • angular组件开发
  • E-HPC支持多队列管理和自动伸缩
  • javascript 总结(常用工具类的封装)
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JAVA并发编程--1.基础概念
  • java取消线程实例
  • mysql中InnoDB引擎中页的概念
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 转载:[译] 内容加速黑科技趣谈
  • # Apache SeaTunnel 究竟是什么?
  • #android不同版本废弃api,新api。
  • #include<初见C语言之指针(5)>
  • #数学建模# 线性规划问题的Matlab求解
  • (13):Silverlight 2 数据与通信之WebRequest
  • (16)Reactor的测试——响应式Spring的道法术器
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)Unity3DUnity3D在android下调试
  • .java 9 找不到符号_java找不到符号
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 依赖注入的基本用发
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 中viewstate的原理和使用
  • .NetCore部署微服务(二)
  • .net打印*三角形
  • .net的socket示例
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • [20181219]script使用小技巧.txt
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [English]英语积累本