mongodb命令指南
一.什么是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
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:
用法:{ $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
把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。例:
> db.collection_name.update( { "id" : 1 } , { $push : { "phone": "123" } } );
其中 phone是一个list,把123加进去。注:即使phone里面有123,还是会加进去,如果需要不重复,需要用到$addToSet.
5) $addToSet
增加一个值到数组内,而且只有当这个值不在数组内才增加。例:
> 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" ] } } )
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。