本节开始学习mongodb文档的增删改查了,如果你还不清楚mongodb的数据类型、数据库和集合的创建和删除,可以参考:mongodb数据建模、数据类型、增删数据库和集合操作,因为之后会时不时使用到相关的命令。
一、插入文档文档相当于一条数据,文档是插入到集合中的,MongoDB使用insert()或save()方法插入一个文档。insert()的使用语法为:db.collection_name.insert(document),document使用类似JSON的语法,相当于一个对象。
添加文档例子:
> db.post.insert({
title: "La Oreja De Van Gogh",
description: "The Ear Of Van Gogh",
by: "Once",
url: "http://www.srcmini.com",
tags: ["mongodb", "espana"],
likes: 12
})
文章图片
这里post是我们的集合名,与之前的创建数据库一样,如果集合在数据库中不存在,那么MongoDB将创建这个集合,然后向其中插入一个文档。
在插入的文档中,如果我们没有指定_id参数,那么MongoDB将为该文档分配一个惟一的ObjectId。
_id是一个集合中每个文档惟一的12字节十六进制数字,12个字节划分如下
_id: ObjectId(4个字节 时间戳, 3个字节 机器ID, 2个字节 进程ID, 3个字节 增量器)
要在一个查询中插入多个文档,可以在insert()命令中传递一个文档数组。
>db.post.insert([
{
title: 'MongoDB安装',
description: 'The Price Of Salt',
by: '半瓶木',
url: 'http://www.srcmini.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},{
title: '增删改查',
description: "不小心删库了",
by: 'Once',
url: 'http://www.srcmini.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 20,
comments: [
{
user:'user1',
message: '如何评论',
dateCreated: new Date(2020,11,10,2,35),
like: 0
}
]
}
])
插入文档还可以使用db.post.save(document),如果没有在文档中指定_id,那么save()方法将与insert()方法工作相同。如果指定了_id,那么它将替换包含_id的文档的整个数据,如save()方法中所指定的那样。
二、查询文档要从MongoDB集合查询数据,需要使用MongoDB的find()方法,方法将以非结构化的方式显示所有文档,使用语法为:db.document_name.find(),要以格式化的方式显示结果,可以使用pretty()方法,即db.document_name.find().pretty(),例如:
文章图片
除了find()方法之外,还有findOne()方法,它只返回第一个文档。
1、查询的where子句
【超简单!mongodb文档(document)的增删改查命令行操作和图解】要根据某些条件查询文档,可以使用以下where子句操作。
操作 | 语法 | 例子 | 等价的SQL |
等于 | {< key> :< value> } | db.post.find({“ by” :” once” }).pretty() | where by = ‘ once’ |
小于 | {< key> :{$lt:< value> }} | db.post.find({“ likes” :{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {< key> :{$lte:< value> }} | db.post.find({“ likes” :{$lte:50}}).pretty() | where likes < = 50 |
大于 | {< key> :{$gt:< value> }} | db.post.find({“ likes” :{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {< key> :{$gte:< value> }} | db.post.find({“ likes” :{$gte:50}}).pretty() | where likes > = 50 |
不等于 | {< key> :{$ne:< value> }} | db.post.find({“ likes” :{$ne:50}}).pretty() | where likes != 50 |
文章图片
2、AND与查询
在find()方法中,如果你通过’’分隔多个键来传递它们,那么MongoDB将其视为AND与条件,下面是AND与的基本语法
>db.post.find(
{
$and: [
{key1: value1}, {key2:value2}
]
}
).pretty()
文章图片
3、OR或查询要基于OR或条件查询文档,需要使用$or关键字,下面是OR的基本语法
>db.post.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
文章图片
4、同时使用AND和OR查询
下面的例子将显示likes大于10的文档,相当于SQL where子句:’ where like > 10 AND (by = ” OR title = ” )’
文章图片
三、更新文档MongoDB的update()和save()方法用于将文档更新到集合中。update()方法更新现有文档中的值,而save()方法用在save()方法中传递的文档替换现有文档。
1、update()方法
Update方法的使用语法为:db.collection_name.update(查询标准,更新的数据),例如:
db.post.update({'title':'AAA'},{$set:{'title':'BBB'}})
默认情况下,MongoDB只更新一个文档。要更新多个文档,需要将参数’ multi’ 设置为true,如:
db.post.update({'title':'AAA'}, {$set:{'title':'BBB'}},{multi:true})
2、save()方法
save()方法用在save()方法中传递的新文档替换现有文档,使用语法为:db.collection_name.save(_id:ObjectId(), new_data)。
四、删除文档MongoDB的remove()方法用于从集合中删除文档,方法接受两个参数,一个是删除标准,为可选项,不设置的话会删除所有;第二个是一个标记,设置为true或1,则只删除一个。
例如,下面的删除语句删除所有标题为’AA’的文档:
db.post.remove({'title':'AA'})
推荐阅读
- mongodb进阶查询(投影查询、分页查询(limit和skip)以及查询sort排序)
- mongodb数据建模分析、数据类型、增删数据库和集合操作
- mongodb环境部署(下载、安装和配置全解(Windows和Linux))
- 使用C++实现trie树(单词查找树,字典树)
- Python元组tuple使用详解
- Python数据结构之列表list用法和原理全解
- Python字符串String使用和操作完全解读
- JavaScript使用回溯法解决整数分解问题
- python数据结构之set的用法详解