本节开始学习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.srcmini02.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.srcmini02.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
title: '增删改查',
description: "不小心删库了",
by: 'Once',
url: 'http://www.srcmini02.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子句
要根据某些条件查询文档,可以使用以下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'})
评论前必须登录!
注册