码迷,mamicode.com
首页 > 数据库 > 详细

mongodb命令指南

时间:2015-04-23 21:49:18      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:mongodb   数据库   nosql数据库   find   update   

一.什么是MongoDB

    简单的说,MongoDB是一种数据库,像我们常用的mysql,sqlserver,orcale.但是跟这些数据库不同的是,他们都是关系型数据库,而MongoDB是非关系型数据库(NoSql)。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。Mongo的官方网站地址是:http://www.mongodb.org/,读者可以在此获得更详细的信息。

MongoDB有三个基本的术语,数据库,集合,文档。数据库大家都知道是什么。那么集合是什么,集合就相当于mysql的表;文档就相当于表中的某一列。

这么说就很清楚了吧。

首先说说数据库和集合的指令:

1.查看所有的数据库:

show dbs

2.使用某一个数据库

use mydb

3.查看这个数据库中所有的集合:

show collections


二.查询:MongoDB find


db.collection.find(query, fields)
query 可选. 使用查询操作符指定查询条件
fields 可选. 指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)


1).查询集合中的所有文档。


//将返回集合中所有文档
db.collection.find()
//或者
db.collection.find({})


第一个参数若为键/值对时,查询过程中就意味着执行了条件筛选(query),下面查询操作将返回collection集合中age键值为18的文档集合。


db.collection.find({"age":18})
//也可以多个条件查询,逗号隔开就好了
db.collection.find({"age":18,"sex":"man"})


我们可以通过find 的第二个参数来指定返回的键。


若find不指定第二个参数,查询操作默认返回查询文档中所有键值。mongo中也可以指定返回的键,这样我们就可以避免查询无用键值查询所消耗的资源、会节省传输的数据量和内存消耗。


db.users.find({}, {"age":1})
注意看 {"age":1},并不是指age=1,因为它在第二个参数(fields),指的是,查找文档中所有的age,当然,也可以多个值。




如果数据时双层的。例如:
"user":{
"name":"mm",
"age":10
}


无论是 query还是fields都是支持的。比如你需要查询 age = 10的所有玩家。
db.collection.find({"user.age":18})


查询条件不只是相等,也可以用其他比较操作。
比如,我们使用下面的比较操作符"$gt","$gte","$lt","$lte","$ne"(分别对应">"、 ">=" 、"<" 、"<=","!="),组合起来进行范围的查找。
如 查询 年龄 大于20小于30岁的玩家
db.collection.find({"age":{"$gt":20,"lt":30}})


$in


查找key在values列表的的文档。


db.collection.find({"age":{"$in":[10,20]}})


mongodb是很灵活的,以上所有的查询,都可以随意组合,也可以用于update,开动你的想象力吧,只要满足mongodb语法。






三.更新:MongoDB update
mongodb update用了更新文档。


db.collection.update( criteria, objNew, upsert, multi )


query  : update的查询条件,类似sql update查询内where后面的
fields   : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert   : 这个参数的意思是,如果文档中不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi    : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。



upsert和multi很简单就不解释了。下面知悉讲讲query和fields:


1)$set
用法:{ $set : { field : value } }
就是相当于sql的set field = value,全部数据类型都支持$set。


db.collection_name.update( { "id" : 1 } , { $set : { "name" : "mm"} } )
set是设置key为name的value为"mm"


2) $inc
用法:{ $inc : { field : value } }

意思对一个数字字段field增加value,例:


db.collection_name.update({ "id" : 1 } , { $set : { "number" : 1} } )
如上,如果没有name或者number但是需要添加(甚至没有这个"id"=1的doc),需要把upsert置为true.


3) $unset
用法:{ $unset : { field : 1} }


顾名思义,就是删除字段了。例:
> db.collection_name.update({ "id" : 1 } , { $unset : { "name":1 } } )
就是把doc的name字段给删除了。

没看出field : 1里面的1是干什么用的。


数组操作:


4) $push


用法:{ $push : { field : value } }


把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。例:


> db.collection_name.update( { "id" : 1 } , { $push : { "phone": "123" } } );
其中 phone是一个list,把123加进去。注:即使phone里面有123,还是会加进去,如果需要不重复,需要用到$addToSet.


5)  $addToSet


用法:{ $addToSet : { field : value } }


增加一个值到数组内,而且只有当这个值不在数组内才增加。例:
> db.collection_name.update({ "id" : 1 }  , { $addToSet : { "phone": {$each : ["222","333"] } } } );


phone后面可以是"123",也可以添加多个值,{"$each":["222","333"]},如果存在这个值,那就忽略掉。




6) $pushAll

用法:{ $pushAll : { field : value_array } }


同$push,只是一次可以追加多个值到一个数组字段内。例:


> db.collection_name.update( { "id" : 1 } , { $pushAll : { "phone": ["444","555"] } } );


7) $pop


删除数组内的一个值


用法:
删除最后一个值:{ $pop : { field : 1 } }
删除第一个值:{ $pop : { field : -1 } }


注意,只能删除一个值,也就是说只能用1或-1,而不能用2或-2来删除两条。


8) $pull


用法:$pull : { field : value } }


从数组field内删除一个等于value值。例:


> db.collections.update( { "_d" : 1 } , { $pull : { "phone": "111" } } );


9) $pullAll


用法:{ $pullAll : { field : value_array } }


同$pull,可以一次删除数组内的多个值。例:


> db.collections.update( { "id" : 1 } , { $pullAll : { "phone": [ "222" , "333" ] } } )




mongodb命令指南

标签:mongodb   数据库   nosql数据库   find   update   

原文地址:http://blog.csdn.net/majianfei1023/article/details/45166827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!