1.MongoDB基本使用
写入和查询:
-- 查看所有数据库
> show dbs
admin
imooc
local
-- 查看某一数据库下所有collection集合(先切换到对应数据库)
> use test1
> show tables
mycol
runoob
-- 创建数据库,如果不存在就创建数据库,否则切换到指定数据库
use imooc
-- 删除数据库(先切换,再使用db.dropDatabase()命令)
use imooc
db.dropDatabase()
-- 创建集合 db.createCollection(name,options)[或者你直接插入文档时,MongoDB回驻地创建集合。]
db.createCollection("runoob")
db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:10000})
db.mycol2.insert({"name":"菜鸟教程"})
-- 删除集合(先切换,再使用db.site.drop()命令)
use test1
> show tables
mycol
mycol1
system.indexes
runoob
> db.mycol1.drop()
插入文档:
-- 插入文档
> use test1
> show tables
mycol
runoob
> db.runoob.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100})
-- 查看已插入文档
db.runoob.find()
> { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
-- 我们也可以将数据定义为一个变量,然后再插入
> document=({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
> db.col.insert(document)
MongoDB更新文档:
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 :可选,抛出异常的级别。
注:pretty()是格式化find()返回的结果。
-- 插入数据(准备数据)
db.col.insert({
title:"MongoDB教程",
description:"MongoDB是一个NoSQL数据库",
by:"菜鸟教程",
url:"http://www.runoob.com",
tags:['mongodb','database','NoSQL'],
likes:100
})
-- update()更新数据
db.col.update({"title":"MongoDB教程"},{$set:{"title":"MongDB"}})
db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
-- 以上只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置multi参数为true。
db.col.update({ "title":"MongoDB 教程" },{$set:{"title":"MongoDB"}},{multi:true})
删除文档:
db.collection.remove(
<query>,
{
justOne:<boolean>,
writeConcern:<doucment>
}
)
参数说明:
- query:(可选) 删除的文档的条件。
- justOne:(可选) 如果设为true或1,则只删除一个文档。
- writeConcern:(可选) 抛出异常的级别。
-- 接下来我们移除title为"MongoDb"和"Mongo"的文档
> db.col.find().pretty()
{
"_id" : ObjectId("5b2b64e492586d0f4213902f"),
"title" : "MongoDB",
"description" : "MongoDB是一个NoSQL数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com"
}
{
"_id" : ObjectId("5b2b6a4992586d0f42139030"),
"title" : "MongoDb",
"by" : "Runoob"
}
{
"_id" : ObjectId("5b2b6ac292586d0f42139031"),
"id" : ObjectId("5b2b6a4992586d0f42139030"),
"title" : "Mongo"
}
> db.col.remove({"title":"MongoDb"})
WriteResult({ "nRemoved" : 1 })
> db.col.remove({"title":"Mongo"})
WriteResult({ "nRemoved" : 1 })
> db.col.find().pretty()
{
"_id" : ObjectId("5b2b64e492586d0f4213902f"),
"title" : "MongoDB",
"description" : "MongoDB是一个NoSQL数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com"
}
-- 如果多个文档的title都是相同,且只想删除其中一个,可以设置justOne为1
db.col.remove(DELETION_CRITERIA,1)
如果我们想删除所有数据,可以使用以下方式(类似常规SQL的truncate命令):
db.col.remove({})
查询文档:
MongoDB查询数据的语法格式如下:
db.collection.find(query,projection)
- query:可选,使用查询操作符指定查询条件
- projection:可选,使用投影操作符返回指定的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下:
db.col.find().pretty()
MongoDB 与 RDBMS Where语句比较(find()与where作用类似):
MongoDB AND条件:
MongoDB的find()方法可以传入多个键(key),每个键(key)以逗号隔开,即常规SQL的AND条件。
db.col.find({ key1:value1, key2:value2}).pretty()
实例:以下实例通过by和title键来查询菜鸟教程中的MongoDB教程的数据
类似于WHERE语句:WHERE by=”菜鸟教程” AND title=”MongoDB 教程”
db.col.find({"by":"菜鸟教程","title":"MongoDB 教程"}).pretty()
MongoDB OR条件:
MongoDB OR条件语句使用了关键字$or,语法格式如下:
db.col.find(
{
$or:[
{key1:value1},{key2:value2}
]
}
)
实例:查询by值为菜鸟教程 或 键 title值为MongoDB教程 的文档
db.col.find({$or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]})
AND和OR联合使用:
AND和OR联合使用,类似常规SQL语句为:’where likes > 50 AND (by = ‘菜鸟教程’ OR title=’MongoDB 教程’)’
db.col.find({"likes":{$gt:50},$or:[{"by":"菜鸟教程"},{"title":"MongoDbB 教程"}]}).pretty()
条件操作符:
条件操作符用于比较两个表达式并从mongoDB集合中获取数据。
MongoDB中条件操作符有:
- (>)大于 - $gt
- (<)小于 - $lt
- (>= ) 大于等于 - $gte
- (<=) 小于等于 - $lte
-- (>)大于操作符 $gt
db.col.find({"like":{$gt:100}})
-- (>=) 大于等于操作符 $gte
db.col.find({likes:{$gte:100}})
-- (<)小于操作符 $lt
db.col.find({like:{$lt:150}})
-- (<=)小于等于操作符 $lte
db.col.find({like:{$lte:150}})
-- 使用(<)和(>)查询 $lt和$gt
db.col.find({likes:{$lt:200,$gt:100}})
$type 操作符:
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
-- 如果想获取"col"集合中title为String的数据
db.col.find({ "title":{$type:2} })
Limit 与 Skip方法:
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB读取的记录条数。
db.col.find().limit(number)
db.col.find({"title":1}).limit(2)
我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接收一个数字传输作为跳过的记录条数。
db.col.find().limit(number).skip(number)
-- 下面实例只会显示第二条文档数据
db.col.find({"title":1}).limit(1).skip(1)