环境配置与安装
安装
略
查看MongoDB版本
mongo -version
启动MongoDB服务
检查服务状态
service mongodb status
启动服务
service mongodb start
打开配置文件,连接MongoDB
mongo
查看数据列表
show dbs
退出
exit
MongoDB 连接
mongo
MongoDB 数据库操作
创建数据库
use DATABASE_NAME
DATABASE_NAME:自定义数据库名称
例:
use testdb # 创建数据库 - testdb
db # 查看数据库名称
查看所有数据库:
show dbs
插入数据
db.testdb.insert({"name":"FreeAIHub"})
show dbs
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
删除数据库
db.dropDatabase()
创建集合
db.createCollection(name, options)
参数说明:
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
举例:
在 testdb
数据库中创建 c1集合:
use testdb
db.createCollection("c1")
查看已有集合:
show collections
创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
db.createCollection("c11", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
db.c11.insert({"name" : "FreeAIHub"})
show collections
删除集合
db.collection.drop()
MongoDB 文档操作
准备测试数据:
use testdb
db.c7.insert({
title: '动手学Redis',
description: '极速内存数据库',
by: 'FreeAIHub',
url: 'http://www.freeaihub.com',
tags: ['redis'],
likes: 200
})
db.c7.insert({title: '动手学Java',
description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
by: 'FreeAIHub',
url: 'http://www.freeaihub.com',
tags: ['java'],
likes: 150
})
db.c7.insert({title: '动手学mongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'mongo',
url: 'http://www.freeaihub.com',
tags: ['mongodb'],
likes: 100
})
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document)
举例:
以下文档可以存储在 MongoDB 的 testdb数据库 的 col 集合中:
use testdb
db.c1.insert({title: '动手学MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
})
以上实例中 c1是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
查看已插入的文档
db.c1.find()
我们也可以将数据定义为一个变量,如下所示:
document=({title: '动手学MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
});
#执行插入操作:
db.c2.insert(document)
db.c2.find()
更新文档
MongoDB 使用 update()
和 ave()
方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。
update()
方法
update() 方法用于更新已存在的文档。语法格式如下:
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.c3.insert({
title: '动手学MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
通过 update()
方法来更新标题(title
):
db.c3.update({'title':'动手学MongoDB'},{$set:{'title':'MongoDB动手学'}})
db.c3.find().pretty()
可以看到标题(title)由原来的 “动手学MongoDB” 更新为了 “MongoDB动手学”。
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi
参数为 true
。
db.col.update({'title':'动手学MongoDB'},{$set:{'title':'New Title you want'}},{multi:true})
save()
方法
save()
方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数说明:
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
举例:
以下实例中我们先插入一条数据,查找到其 ObjectId
,再使用 save
方法,根据这个 id
替换数据:
db.c4.insert({
title: '动手学MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
db.c4.find()
db.c4.save({
"_id" : ObjectId("在此处填写上面得到的ObjectID"),
"title" : "MongoDB动手学"
})
替换成功后,我们可以通过 find() 命令来查看替换后的数据
db.c4.find().pretty()
查询文档
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty()
方法,语法格式如下:
db.col.find().pretty()
pretty()
方法以格式化的方式来显示所有文档。
MongoDB 与 RDBMS Where 语句比较
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {:} | db.col.find({"by":"freeaihub"}).pretty() | where by = 'freeaihub' |
小于 | {:{$lt:}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {:{$lte:}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {:{$gt:}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {:{$gte:}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {:{$ne:}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
MongoDB AND 条件
MongoDB 的 find()
方法可以传入多个键(key
),每个键(key
)以逗号隔开,即常规 SQL 的 AND
条件。
语法格式如下:
db.col.find({key1:value1, key2:value2}).pretty()
举例:
db.c7.find({"by":"FreeAIHub", "title":"动手学Redis"}).pretty()
MongoDB OR 条件
MongoDB OR
条件语句使用了关键字 $or
,语法格式如下:
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
举例:
db.c7.find({$or:[{"by":"mongo"},{"title": "mongo"}]}).pretty()
AND 和 OR 联合使用
db.c7.find({"likes": {$gt:50}, $or: [{"by": "freeaihub"},{"title": "动手学mongoDB"}]}).pretty()
MongoDB 条件操作符
条件操作符用于比较两个表达式并从mongoDB集合中获取数据。
在本章节中,我们将讨论如何在MongoDB中使用条件操作符。
MongoDB中条件操作符有:
- (>) 大于 -
$gt
- (<) 小于 -
$lt
- (>=) 大于等于 -
$gte
- (<= ) 小于等于 -
$lte
MongoDB Limit与Skip方法
MongoDB Limit() 方法
如果你需要在 MongoDB 中读取指定数量的数据记录,可以使用 MongoDB 的 Limit
方法,limit()
方法接受一个数字参数,该参数指定从 MongoDB 中读取的记录条数。
语法:
limit()
方法基本语法如下所示:
db.COLLECTION_NAME.find().limit(NUMBER)
举例:
集合 col 中的数据如下:
use testdb
db.c8.insert({
title: '动手学Redis',
description: '极速内存数据库',
by: 'FreeAIHub',
url: 'http://www.freeaihub.com/redis/',
tags: ['redis'],
likes: 200
})
db.c8.insert({title: '动手学Java',
description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
by: 'FreeAIHub',
url: 'http://www.freeaihub.com/java/',
tags: ['java'],
likes: 150
})
db.c8.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'freeaihub',
url: 'http://www.freeaihub.com/mongodb/',
tags: ['mongodb'],
likes: 100
})
以下实例为显示查询文档中的两条记录:
db.c8.find({},{"title":1,_id:0}).limit(2)
MongoDB Skip() 方法
我们除了可以使用 limit()
方法来读取指定数量的数据外,还可以使用 skip()
方法来跳过指定数量的数据,skip
方法同样接受一个数字参数作为跳过的记录条数。
语法:
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
举例:
db.c8.find({},{"title":1,_id:0}).limit(1).skip(1)
MongoDB 排序
MongoDB sort() 方法
在 MongoDB 中使用 sort()
方法对数据进行排序,sort()
方法可以通过参数指定排序的字段,并使用 1
和-1
来指定排序的方式,其中 1
为升序排列,而 -1
是用于降序排列。
语法:
db.COLLECTION_NAME.find().sort({KEY:1})
举例:
将如下数据插入至c9集合中
use testdb
db.c9.insert({
title: '动手学Redis',
description: '极速内存数据库',
by: 'FreeAIHub',
url: 'http://www.freeaihub.com',
tags: ['redis'],
likes: 200
})
db.c9.insert({title: '动手学Java',
description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
by: 'FreeAIHub',
url: 'http://www.freeaihub.com',
tags: ['java'],
likes: 150
})
db.c9.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'freeaihub',
url: 'http://www.freeaihub.com',
tags: ['mongodb'],
likes: 100
})
数据按字段 likes
的降序排列:
db.c9.find({},{"title":1,_id:0}).sort({"likes":-1})
数据按字段 likes 的升序排列:
db.c9.find({},{"title":1,_id:0}).sort({"likes":1})