首页 > 数据库 >Spider理论系列--MongoDB(二)

Spider理论系列--MongoDB(二)

时间:2023-05-29 20:31:36浏览次数:54  
标签:name -- MongoDB age db Spider update user find

六、INSERT

使用insert

db.集合名.insert(文档) #如果是添加数据 建议使用 insert

插入多条数据:

db.集合名.insert([文档]) #注意 一定要加[] 否则可能只会把 第一条文档插入进去

db.user.insert({'name':'lisi', 'age': 20})

db.user.insert([{'name':'lisi', 'age': 20},{'name': 'wangwu', 'age': 30}])

3.2 版本后还有以下几种语法可用于插入文档:(建议使用)

  • db.collection.insertOne():向指定集合中插入一条文档数z据
  • db.collection.insertMany():向指定集合中插入多条文档数据
db.user.insertOne({'name':'lisi', 'age': 20})

db.user.insertMany([{'name':'lisi', 'age': 20},{'name': 'wangwu', 'age': 30}])

七、FIND 查询

(1) find 查询所有

db.集合名.find([条件],{key1:1[,[key2:1]]}) #查询所有的数据 代表 显示哪些字段名

db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键

db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键

注意:

两种模式不可混用(因为这样的话无法推断其他键是否应返回)

db.collection.find(query, {title: 1, by: 0}) // 错误

_id 键默认返回,需要主动指定 _id:0 才会隐藏

只能全1或全0,除了在inclusion模式时可以指定_id为0

db.collection.find(query, {_id:0, title: 1, by: 1}) // 正确

实例

db.user.find({}, {'name': 0})
db.user.find({'age': 18}, {'name': 1})  # 只返回那么字段
db.user.find({'age': 18}, {'name': 0})  # 不返回name字段
(2) findOne() 查询一条

db.集合名.findOne([条件],{key1:1[,[key2:1]]}) #查询一条数据 代表 显示哪些字段名

db.user.findOne({}, {name:1})
(3) count 统计数据条数

db.集合名.find([条件]).count()

db.user.find({}).count()
(4) pretty() 展开来查看

db.集合名.find([条件]).pretty()

db.user.find({}).pretty()
(5) 查询条件的操作符

符号

符号说明

实例

说明

$gt | 大于 | db.user.find({age:{$gt:18}})

年龄大于18 的



$gte | 大于等于 | db.user.find({age:{$gte:18}})

年龄大于等于18的



$lt | 小于 | db.user.find({age:{$lt:18}})

年龄小于18



$lte | 小于等于 | db.user.find({age:{$lte:18}})

年龄小于等于18



{key:value}

等于

db.user.find({age:18})

年龄等于18

/值/

模糊查询

db.user.find({username:/小/})

查询年龄中包含小字的文档

/^值/

以...作为开头

db.user.find({username:/^小/})

查询username中以小字作为开头的文档

/值$/ | 以...作为结尾 | db.user.find({username:/小$/})

查询username中以小字作为结尾的文档



$in | 在...内 | db.user.find({age:{$in:[18,20,30]})

查询年龄在18,20,30的文档



$nin | 不在...内 | db.user.find({age:{$nin:[18,20,30]}})

查询年龄不在 1,20,30的文档



$ne | 不等于 != | db.user.find({age:{$ne:18}})

查询年龄不为18的文档



(6) AND 查询
db.col.find({key1:value1, key2:value2}).pretty()

db.集合名.find({条件一,条件二,,,})

例如:

db.user.find({name:"张三",age:{$gt:10}}) #查询name为张三的 且 年龄 大于10岁的

db.user.find({name:"张三",age:10})        #查询name为张三的 且 年龄为10岁的
(7) OR 查询

db.集合名.find({$or:[{条件一},{条件二},,,]})

例如:

db.user.find({$or:[{name:"张三"},{name:"赵六"}]})   #查询name为张三 或者为赵六的所有数据
(8) AND 和 OR 的使用

db.集合名.find({条件一,,,$or:[{条件1},{条件2}]})

例如:

db.user.find({name:"张三",$or:[{age:10},{age:28}]})  #name为张三   年龄为10岁或者28岁的所有数据
(9) LIMIT 取值

db.集合名.find().limit(num) #从第0个开始取几个

例如:

db.user.find().limit(5)   #从0开始取5条数据
(10) skip 跳过几个

db.集合名.find().skip(num) #跳过几条数据

例如:

db.user.find().skip(2) #从第三条数据 取到最后
(11) limit skip 配合使用

db.集合名.find().skip().limit(num)

例如:

db.user.find().skip(2).limit(2)  #从第三个开始 取2个
(12) SORT 排序

在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

db.集合名.find().sort({key:1|-1}) #升序或者降序

例如:

db.user.find().sort({age:1})  #查询所有数据 按照年龄 升序

db.user.find().sort({age:-1})  #查询所有数据 按照年龄 降序

八、UPDATE 文档的修改

结构:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)u
  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如,inc...)等,也可以理解为sql update查询内set后面的
(1) 更新操作符 $set直接修改 $inc累加修改
  • db.集合名.update(条件,数据,{multi:true}) 更改
db.user.update({name:"张三"},{$inc:{age:5}}) #修改name为张三的文档  将age在原有的基础上 加5

db.user.update({name:"张三"},{$set:{age:5}}) #修改name为张三的文档  将age的值 修改为5

db.user.update({name:"张三"},{$set:{age:5}}) #将name为张三的文档 的年龄 修改为 5
  • 只更新第一条记录:
db.col.update({"count" : {$gt:1}} , { $set : {"test2" : "OK"}});
  • 全部更新:
db.col.update({"count" : {$gt: 3 }} , {$set : {"test2" : "OK"} });
  • 只添加第一条:
db.col.update({ "count" : { $gt : 4 }} , {$set : {"test5" : "OK"} });

3.2版本以后(建议使用)

updateOne() 更新一条

db.user.updateOne({'name':'lisi'}, {$inc:{'age':5}})

updateMany(query,update) 更新多条

db.user.updateMany({'name':'lisi'}, {$inc:{'age':5}})

九、REMOVE 文档的删除

主体结构

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
(1)参数说明:
  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。
(2) 主体结构

db.集合名.remove(条件) #默认将所有都匹配到的数据进行删除

db.集合名.remove(条件,1) #只删除 第一个匹配到的数据

db.集合名.remove(条件,,{justOne:true}) #只删除 第一个匹配到的数据

示例

b.user.remove({'age':{$gt: 30}})  # 删除年龄大于30的所有数据
b.user.remove({'age':{$gt: 30}}, 1)  # 删除年龄大于30的一条数据
db.col.remove({})  清空集合 "col" 的数据
(3) 3.2 版本后还有以下几种语法可用于删除文档:(建议)

remove() 方法已经过时了,现在官方推荐使用

deleteOne() 删除一条

db.user.deleteOne({'age':{$gt: 0}})

deleteMany() 删除多条

db.user.deleteMany({'age':{$gt: 0}})

十、数据库删除与退出

(1) 数据库删除
  1. 删除之前 最好use一下
  2. db.dropDatabase()
(2) 数据库的退出

exit

十一、Python操作MongoDB

1、导入 pymongo

from pymongo import MongoClient

2、连接服务器 端口号 27017

(1) 连接MongoDB

连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口port,端口如果不传默认是27017。

(2) 代码
conn = MongoClient("localhost")

MongoClient(host='127.0.0.1',port=27017)

3、连接数据库

db = conn.数据库名称
连接集合
collection = db.collection_name

###4、插入数据

(1) 在3.x以上 建议 使用

insert_one 插入一条数据

insert_many() 插入多条数据

(2) 返回 id 使用insert_one()

data.inserted_id

data.inserted_ids

5、查询数据

(1) 查询一条

db.user.find_one()

(2) 带条件查询

db.user.find({"name":"张三"})

(3) 查询 id

from bson.objectid import ObjectId*#用于ID查询

data = db.user.find({"_id":ObjectId("59a2d304b961661b209f8da1")})

data = db.user.find({'_id': ObjectId('59f290b01683f9339214746d')}) #_id': ObjectId('59f290b01683f9339214746d')
(5) 模糊查询
  • {"name":{'$regex':"张"}}
  • {'xxx':re.compile('xxx')}

6、sort limit skip

(1) sort 排序

年龄 大于10

data = db.user.find({"age":{"$gt":10}}).sort("age",1) #年龄 升序 查询  pymongo.ASCENDING   --升序

data = db.user.find({"age":{"$gt":10}}).sort("age",-1) #年龄 降序 查询    pymongo.DESCENDING --降序
(2) limit 取值
取三条数据
db.user.find().limit(3)
m= db.user.find({"age":{"$gt":10}}).sort("age",-1).limit(3)
(3) skip 从第几条数据开始取

db.user.find().skip(2)

7、update 修改

update()方法其实也是官方不推荐使用的方法,在这里也分了update_one()方法和update_many()方法,用法更加严格,

(1) update_one() 第一条符合条件的数据进行更新

db.user.update_one({"name":"张三"},{"$set":{"age":99}})

(2) update_many() 将所有符合条件的数据都更新

db.user.update_many({"name":"张三"},{"$set":{"age":91}})

(3) 其返回结果是UpdateResult类型,然后调用matched_countmodified_count属性分别可以获得匹配的数据条数和影响的数据条数。

  • result.matched_count
  • result.modified_count

8、remove 删除

删除操作比较简单,直接调用remove()方法指定删除的条件即可,符合条件的所有数据均会被删除,

(1) 删除一条

delete_one()即删除第一条符合条件的数据

collection.delete_one({“name”:“ Kevin”})

(2) 删除多条

delete_many()即删除所有符合条件的数据,返回结果是DeleteResult类型

collection.delete_many({“age”: {$lt:25}})

(4) 可以调用deleted_count属性获取删除的数据条数。

result.deleted_count

9、关闭连接

conn.close()

标签:name,--,MongoDB,age,db,Spider,update,user,find
From: https://blog.51cto.com/u_15915681/6373863

相关文章

  • 实验六
    #include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[10];//学号ints1;//期末成绩ints2;//平时成绩doublesum;//总评charlevel[10];//等级}STU;intfun......
  • HTTP&HTTPS协议
    HTTP协议1、什么是HTTP超文本传输协议(HyperTextTransferProtoco,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP(HyperTextTransterProtocol,超文本传输协议),是一个基于请求与响应,无状态的,应用层的协议常基干TCP/P协议传输数据,互联网上应用最为广......
  • 内部类
        ......
  • 第十二届蓝桥杯c++b组国赛题解(还在持续更新中...)
    试题A:带宽解题思路:由于小蓝家的网络带宽是200Mbps,即200Mb/s,所以一秒钟可以下载200Mb的内容,根据1B=8b的换算规则,所以200Mb=200/8MB=25MB。所以小蓝家的网络理论上每秒钟最多可以从网上下载25MB的内容。代码实现:#include<iostream>#include<algorithm>usingnamespacestd......
  • docker 实例网络异常占用
    首先删除无效容器或(如果您使用的是docker-composedockercontainerrm<container>docker-composerm<service>docker-compose)确保容器已消失:或者输出中不得有此类容器dockercontainerls|grep<container>docker-composeps|grep<container>现在它可能仍连接到网络,因此......
  • springmvc请求处理流程分析入口
    1从浏览器发起请求,根据servlet原理会进入到service方法2根据HttpServlet实习了service方法,所以进入到HttpServlet的service方法3service方法根据post和get的请求方式,选择进入doGet和doPost方法4FrameworkServlet重写了doGet和doPost方法,又调用了processRequest5最后调用......
  • 第五单元 函数(方法)
    1.函数(方法)的简介函数,在C#中更多的被称为方法。它表示一个的类所具有的行为(方法,函数)。方法的作用封装一些公共的代码,以达到功能重复利用,减少代码冗余。例如,我们经常要进行输入,输出,系统于是帮我们封装好了Console.WriteLine(),Console.ReadLine()等方法。一个方法是把一......
  • 在linux上搭建web服务(静态网站)
    目录在linux上搭建web服务(静态网站)一、简介1.1.什么是web服务器1.2.web服务器的工作原理1.3.web服务软件有哪些1.4.http/https协议1.5.URL/URI1.6.apache1.7.nginx二、搭建apache服务,部署静态网站1.1.安装apache服务程序1.2.配置服务器文件参数1.2.1.配置文件/etc/httpd/conf/ht......
  • alluxio进行debug的方法
    在alluxio-env中。增添ALLUXIO_MASTER_ATTACH_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=60001"ALLUXIO_WORKER_ATTACH_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=60003"ALLUXIO_USER_ATTACH_OPTS=&......
  • rgb颜色代码怎么透明
    在RGB颜色模式中,每个颜色通道的值范围是0到255。如果您想要使某种颜色透明,可以将该颜色的alpha通道值设置为0,其中alpha值表示颜色的不透明度,范围从0(完全透明)到1(完全不透明)。在CSS中,可以通过使用RGBA或者HSLA颜色来指定带有透明度的颜色。例如:color:rgba(255,......