文档章节

mongodb命令指南

Dragon_
 Dragon_
发布于 2015/04/24 15:19
字数 1405
阅读 4
收藏 0

欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/45166827


一.什么是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" ] } } )




本文转载自:http://blog.csdn.net/majianfei1023/article/details/45166827

共有 人打赏支持
Dragon_
粉丝 1
博文 16
码字总数 0
作品 0
闵行
程序员
分布式缓存MongoDB+CentOS安装指南(阿里云)

在之前的文章介绍过了分布式缓存利器系列文章,进介绍另外一种NoSQL,它也是分布式缓存中间件--MongoDB。此文根据MongoDB官方网站安装指南简化而来,并且加入了自己的一些见解,就是为了使读...

landy8530
09/03
0
0
如何在Ubuntu 12.04上安装MongoDB?

在Ubuntu 12.04上安装MongoDB MongoDB是现代网络应用程序中普遍使用的一个文档数据库。这个指南会帮助你设置一个虚拟专用服务器,作为一个专用的MongoDB服务器,以提供生产应用程序的环境。 ...

samday
2014/04/09
0
0
学习MongoDB (1) :配置安装

MongoDB是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用的功能,如辅助索引、范围查询、排序。 最近开始在Windows 32位平台下研究MongoDB的使用,为了方便,本人更...

碎脸夜叉
2013/01/24
0
0
如何安全地配置一个生产环境的MongoDB服务器?

如何安全地配置一个生产环境MongoDB服务器? 安全配置一个生产环境MongoDB服务器 如果MongoDB是一个为你提供选择的文档存储器,那么这篇文章会帮助你,安全妥善地配置一切就绪的生产环境。 ...

samday
2014/04/15
0
0
福利丨MongoDB赎金事件的背后,DBA们该如何反思?

最近MongoDB赎金事件闹得沸沸扬扬,一些技术实践者的观点是,本次安全事件的根源不在MongoDB,可能在于不规范的操作和使用,而一些安全战略师则反驳这是意料之中的事故。对此,你怎么看?DBA...

DBAplus社群
2017/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
3
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部