mongoDB(基本使用)

之前的公司是使用oracle,现在考虑到就要接触mongo,记录下学到的皮毛,方便回忆。

参考:菜鸟联盟--MongoDB

什么是mongodb?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。


SQl和mongo术语理解:
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins   表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

看了上面两张表,那就什么都豁然开朗啦~!!!!

数据库

一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

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

文档(相当于sql的每行数据)

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型。
{"id":1,"name":"liyue","sex":"girl"}


集合(数据表)

{"id":1,"name":"liyue","sex":"girl"}
{"id":2,"name":"liweien","sex":"boy"}
{"id":3,"name":"haha"}
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的 表格
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

查看数据库中所有集合:
>show collections
col liyue table1

创建mongo数据库

use database_name
数据库不存在创建该数据库,存在则切换到该数据库。
> use liyue
switched to db liyue
> db
liyue

删除mongo数据库

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.collection_name.drop()
>db.table.find()
{"_id":ObjectId("8698623646"),"name":"liyue"}
>db.table.drop()
true
>

插入文档(行数据)

使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.collection_name.insert(document)
注意:如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
插入一个文档:
>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})

MongoDB 删除文档

MongoDB remove()函数是用来移除集合中的数据。
MongoDB数据更新可以使用 update()函数在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
语法:
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
例子:
删除集合col中id:1的文档,
使用find()函数查看col集合中所有文档,
> 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()
……                                        # 没有数据
如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
>db.table1.remove({id:2},1)
WriteResult({"nRemove":1})
如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令,包括自增id也会删除,再次插入数据id从1开始):
>db.col.remove({})
>db.col.find()
>

mongoDB更新文档:

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
1.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 :可选,抛出异常的级别。

例子:
首先在col 集合中insert文档:
>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_name.update({条件},{$set:{列名:"更新值"}})
以上语句只会修改第一条发现的文档!
>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时,就会更新符合条件的所有数据了!

2.save()通过传入新文档代替已有的文档,语法如下:
db.collection.save(
   <document>,   ---------》  {原数据的"_id":....,新数据}
   {
     writeConcern: <document>
   }
)
参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别。

例子:
以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:
原数据:
>db.col.find({_id:ObjectId("56064f89ade2f21f36b03136")})
{"_id":ObjectId("56064f89ade2f21f36b03136"),"name":"liyue"}
save()替换它:
>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 );

MongoDB 查询文档(select)

语法:
>db.集合名.find()
find() 方法以非结构化的方式来显示所有文档。
格式化的方式显示文档可以使用 pretty() 方法,语法格式如下:
>db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。

例子:查询table1中的所有数据
> 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
}

Mongo 与 SQL Where 语句比较

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作 格式 范例 RDBMS中的类似语句
等于  {<key>:<value>} db.col.find({"by":"me"}).pretty() where by = 'me'
小于 $It {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 $Ite {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 $gt {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 $gte {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 $ne {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

mongodb的and条件:(传入多个键以逗号隔开就是and)

MongoDB 的 find() 方法可以 传入多个键(key),每个键(key)以逗号隔开,与 SQL 的 AND 条件一样。
语法格式如下:
>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"

MongoDB OR 条件 $or

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
>db.col.find(
   {
      $or: [
	     {key1: value1}, {key2:value2}
      ]
   }
).pretty()
例子:查询age:25 或者 name:liyue 的所有数据

查询by:liyu 或者title:MongoDB的所有数据
>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
}
>

MongoDB Limit() 方法

使用MongoDB的Limit方法,显示数据条数,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法:
db.collection_name.find().limit(n)   返回n条数据
例子:
>db.test.find().limit(2).pretty()

注意:没有指定limit()方法,则默认显示集合中所有的文档(数据)

mongodb中skip()方法

使用skip()方法来 跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
语法格式:
>db.collection_name.find().limit(n).skip(m)
例子:
以下实例只会显示test集合中第二条数据:
>db.test.find().limit(1).skip(1).pretty()

注意:skip(m) m默认为0

MongoDB 排序 (order by)

sort()方法
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
语法
>db.collection_name.find().sort({KEY:1})
例子:

默认sort({key:1}),顺序显示!!!

































































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值