之前的公司是使用oracle,现在考虑到就要接触mongo,记录下学到的皮毛,方便回忆。
参考:菜鸟联盟--MongoDB
SQl和mongo术语理解:MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
看了上面两张表,那就什么都豁然开朗啦~!!!!
db 命令用于查看当前操作的文档(数据库):
>db
test
show dbs 命令显示mongo所有数据库:
> show dbs
local 0.078GB
test 0.078GB
use database _name 命令切换到指定的数据库:
> use local
switched to db local
> db
local
{"id":1,"name":"liyue","sex":"girl"}
{"id":1,"name":"liyue","sex":"girl"}
{"id":2,"name":"liweien","sex":"boy"}
{"id":3,"name":"haha"}
>show collections
col liyue table1
> use liyue
switched to db liyue
> db
liyue
db.dropDatabase() 注意大写
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
> show dbs
local 0.078GB
runoob 0.078GB
test 0.078GB
接下来我们切换到数据库 runoob:
> use runoob
switched to db runoob
>
执行删除命令:
> db.dropDatabase()
{ "dropped" : "runoob", "ok" : 1 }
最后,我们再通过 show dbs 命令数据库是否删除成功:
> show dbs
local 0.078GB
test 0.078GB
>db.table.find()
{"_id":ObjectId("8698623646"),"name":"liyue"}
>db.table.drop()
true
>
使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.collection_name.insert(document)>db.col.insert({title: 'Mongo',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'liyu',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
查看该文档:
> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "Mongo", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "liyu", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
例外还可以先把要插入的文档保存为一个变量document中,如:document ({....}) 、 document [{......},{......},{.......}]
> document=({title: 'Mongo',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'liyu',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
执行后显示:
{
"title" : "Mongo",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "liyu",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
插入到集合中:
>db.col.insert(document)
WriteResult({"nIserted":1})
db.collection.remove(
,
{
justOne: ,
writeConcern:
}
)
参数说明:
> db.col.find()
{ "_id" : ObjectId("56066169ade2f21f36b03137"), "id" : "1", "description" : "Mongo","tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
使用remove()删除id:1 的文档:
>db.col.remove({id:1})
WriteResult({ "nRemoved" : 1 }) # 删除了一条数据
>db.col.find()
…… # 没有数据
>db.table1.remove({id:2},1)
WriteResult({"nRemove":1})
>db.col.remove({})
>db.col.find()
>
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
参数说明: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: 'MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'liyu',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
更新title:"MongoDB"为title:"hahaha":
>db.col.update({'title':'MongoDB'},{$set:{'title':'hahaha'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
> db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "hahaha",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "liyu",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
>db.col.update({title:mongodb},{$set:{by:"liyue"}},{multi:true})
multi默认为false,也就是只会更新符合条件的第一条数据,当multi设置为true时,就会更新符合条件的所有数据了!
db.collection.save(
, ---------》 {原数据的"_id":....,新数据}
{
writeConcern:
}
)
参数说明:document : 文档数据。writeConcern :可选,抛出异常的级别。
>db.col.find({_id:ObjectId("56064f89ade2f21f36b03136")})
{"_id":ObjectId("56064f89ade2f21f36b03136"),"name":"liyue"}
>db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
替换成功后,我们可以通过 find() 命令来查看替换后的数据
>db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
}
>
更多实例
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
>db.集合名.find()find() 方法以非结构化的方式来显示所有文档。格式化的方式显示文档可以使用 pretty() 方法,语法格式如下:>db.col.find().pretty()pretty() 方法以格式化的方式来显示所有文档。
> db.col.find().pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "liyue",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | { } |
db.col.find({"by":"me"}).pretty() |
where by = 'me' |
小于 $It | { |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 $Ite | { |
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 |
>db.col.find({key1:value1, key2:value2}).pretty()
例子如下:
> db.col.find({"by":"liyu", "title":"MongoDB "}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
类似sql中:select * from col where by = "liyu" and title = "MongoDB"
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
例子:查询age:25 或者 name:liyue 的所有数据
>db.col.find({$or:[{"by":"liyu"},{"title": "MongoDB"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "liyu",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
db.collection_name.find().limit(n) 返回n条数据
例子:
>db.test.find().limit(2).pretty()
>db.collection_name.find().limit(n).skip(m)
例子:
>db.test.find().limit(1).skip(1).pretty()
>db.collection_name.find().sort({KEY:1})
例子: