在mongodb的增删改查之前先简单列表一些数据库的基本操作,如下:
- win+R调出“运行”,再输入“cmd”进入终端,最后输入“mongo”进入到mongodb环境即可进行各种数据库操作(前提是mangodb已安装好且是可用状态)
- 查看数据库:show dbs
- 查看当前操作的数据库:db 或者 db.getName()
- 选择要操作的数据库:use jdzb(use + 数据库名)
- 查看集合:show collections
- 查看集合中的信息:db.COLLECTIONNAME/集合名称.find()
实际效果如下各图:
进入mongodb环境:mongo
查看所有数据库:show dbs
查看当前操作的数据库:db 或 db.getName( )
其余的就不一一展示了,大家可以自己去尝试哈!
(1)创建数据库
- use 要创建的库名 如:use test (若已有,则默认使用;没有则创建)
- 添加数据才会创建成功:db.COLLECTION.insert(),其中id索引会自动递增
(2)选中已存在的数据库进行操作
- 选中数据库:use name
- 删除数据库:db.dropDatabase()
- 创建集合:db.createCollection(“集合名”)
- 删除集合:db.集合名.drop()
增删改查(CRUD)
-
增:
(以下出现的inventory只是一个示范的集合名,根据自己集合名做修改即可)
插入单条数据:
db.collection.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
插入多条数据:
db.collection.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
-
删:
删除单条数据:
db.collection.deleteOne(
<filter>, // 过滤条件
{
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in MongoDB 4.4
}
)
删除多条数据:
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
实例:
下面的实例删除状态为“D”的第一个文档:
db.inventory.deleteOne( { status: "D" } )
以下实例从状态字段等于“A”的inventory集合中删除所有文档:
db.inventory.deleteMany({ status : "A" })
其中删除还有remove方法,大家有兴趣的话可以自己去官方了解一下,下面只做简单介绍:
db.COLLECTIONNAME.remove({条件}{配置项/可选})
配置项:justOne:true
没有配置项,就删除所有符合条件的
有配置项,就删除一项
-
改:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
实例:
先插入一条数据如下:
>db.col.insert({
title: '我是一条数据',
description: '我是即将被修改的一条小数据',
by: '小粗腿Cc',
url: 'https://blog.youkuaiyun.com/weixin_45249263?spm=1000.2115.3001.5343',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
接着我们通过 update() 方法来更新标题(title):
>db.col.update({'title':'我是一条数据'},{$set:{'title':'改你改你'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
> db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "改你改你",
"description" : "我是即将被修改的小数据",
"by" : "小粗腿Cc",
"url" : "https://blog.youkuaiyun.com/weixin_45249263?spm=1000.2115.3001.5343",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
可以看到标题(title)由原来的 "我是一条数据" 更新为了 "改你改你"。
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
>db.col.update({'title':'我是一条数据'},{$set:{'title':'改你改你'}},{multi:true})
-
查:
数据库中常用的操作应该就是查询数据啦,难免因为需求不的通过就需要用到各种各样的查询条件,从而得到想要的数据。
查询所有:
db.collection.find()
下面的实例返回inventory集合中status等于"D"的所有文档:
db.inventory.find( { status: "D" } )
下面的案例返回inventory集合中status等于"A"或"D"的所有文档。
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
下面的案例返回inventory集合中status等于"A" 并且qty小于($lt)30的所有文档:
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
下面的案例返回inventory集合中status等于"A" 或者qty小于($lt)30的所有文档。
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
下面的案例返回inventory集合中status等于**"A" 并且qty小于 ($lt) 30或者item** 是以p字符开头的所有文档。
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
其他的查询条件大家可以去文档中查询,在此就不一一列举啦!