251_Mongodb_增删改查_增_删

举报
alexsully 发表于 2021/12/17 15:19:19 2021/12/17
【摘要】 增 删 操作

Mongodb 操作


1 通用操作数据库、集合

db      # 显示当前数据库 
use dataBaseName    # 如果dataBaseName不存在,在插入数据时将会创建数据库 
show dbs   # 显示当前实例中的数据库 
db.dropDatabase()    # 删除当前选择的库 
db.createCollection("runoob")    # 显式的创建runoob集合 
show tables     # 显示当前数据库中的集合信息 
show collections 
db.runoob.drop()  # 删除runoob集合


创建集合方式

  • 1 直接插入文档
  • 2 使用db.createCollection()
db.createCollection(<name>,<options>)
参数说明
name 创建的集合名词
options:
 capped: 若设置为true, 必须搭配size使用,创建固定集合
 size   搭配capped 使用,限制集合的大小, 文档超过设置的大小, mongodb会自动删除旧文档腾空间
 max:  固定集合中可存文档数
 validator 设置集合具有数据校验功能
 validationlevel 校验时对现有文档的严格程度
 autoindexid: 若设置为false, 不会自动将_id字段创建为索引 4.0后不能在local外数据库中设置该选项
 storageEngine: 允许用户创建集合使用不同的存储引擎
 indexOptionDefaults  设定索引使用的存储引擎


创建固定集合 
db.createCollection( “bob” : {capped:true, size:2000, max:200})  #大小 2000 byte, 数量200

查询是否是capped
db.xxxName.isCapped()


删除集合

db.collection.drop({writeConcern: <document> } )
db.xxxx.drop()

查询集合
Show collections
Show tables 


_插入

新文档添加到集合中。如果该集合当前不存在,则插入操作将创建该集合。

  • db.collection.insertOne() #插入单个文档
  • db.collection.insertMany() #插入多个文档
  • db.collection.insert() #插入单条或多个文档

 

插入操作行为影响:

  • 自动创建不存在的集合、数据库,例如这里的inventory集合
  • 如果不指定,自动生成主键_id及其值
  • 写操作都是基于单个文档级别的原子操作
  • 确认写操作级别,在分片集群中我们需要关注


MongoDB下新建文档的语法

db.collection.insert( 
<document or array of documents>,
 { 
writeConcern:  <document>, 
ordered: <boolean> 
} 
)

documents必填,表示需要插入的文档/数组,可以是一个{doc}/多个文档[{doc1},{doc2},{doc3}] 
writeConcern可选项,写入策略,集群时使用
ordered:是否有序插入,默认是True,表示多个文档是否按照文档顺序插入,若有序 MongoDB不再插入后续文档,若无序 继续插入后续文档

特点
1 如果没有指定数据库,自动创建一个test 数据库
2 没有指定集合,自动创建集合
3 没有指定 _id字段, 新增一个_id字段,objectId类型,且不能重复,可以是数字/字符串类型


db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

db.inventory.insertOne(

{item: "nike" , qty: 200, tags:["cotton", "glass"], size: {h:30, w: 40, uon: "inch"}})


db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red", "small"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray", "yellow", "green"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue", "big"], size: { h: 19, w: 22.85, uom: "cm" } }
])


db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);


Save() 方法

与 insert不同的是, insert() 插入主键相同会报错, save()方法插入会覆盖相同主键的文档 
语法
db.collection.save(<document>, {writeConcern: <document>})

操作同 insert()


4 删除操作

删除文档的方式

  • db.collection.remove()  可以删除只读条件的文档
  • db.collection.deleteMany()只能删除一个文档 类似 remove justone: false
  • db.collection.deleteOne()  只能删除一个文档 类似 remove justone: true

remove(
<query>,{
justOne: <boolean>,
writeConcern: <document>,
collation: <document>
})

Justone 可选参数 默认false, 表示文档与删除条件匹配时, 是否仅删除第一个文档
False 表示删除匹配所有文档, ture 表示删除匹配第一个文档
# 删除
db.inventory.remove({"qty": 100}, {"justOne":true})

删除操作行为影响:

  • 集合中的所有文档都被删除,索引不会删除
  • 写操作都是单个文档级别的原子操作

删除文档的两种方式

# 删除
db.inventory.remove({"qty": 100}, {"justOne":true})


# 删除所有文档 
db.inventory.deleteMany({}) 
db.inventory.deleteMany({status: "A"}) 

# 删除单个文档 
db.inventory.deleteOne( { status: "D" } )  //条件{status: “D”}

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。