文档章节

mongodb命令指南

Bob_1112
 Bob_1112
发布于 2015/04/24 15:19
字数 1405
阅读 6
收藏 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

Bob_1112
粉丝 1
博文 16
码字总数 0
作品 0
徐汇
程序员
私信 提问
如何在Ubuntu 12.04上安装MongoDB?

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

samday
2014/04/09
629
0
分布式缓存MongoDB+CentOS安装指南(阿里云)

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

landy8530
2018/09/03
0
0
学习MongoDB (1) :配置安装

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

碎脸夜叉
2013/01/24
118
0
如何在 Ubuntu 上安装 MongoDB

本教程介绍了在 Ubuntu 和基于 Ubuntu 的 Linux 发行版上安装 MongoDB 的两种方法。 MongoDB 是一个越来越流行的自由开源的 NoSQL 数据库,它将数据存储在类似 JSON 的灵活文档集中,这与 SQ...

作者: Sergiu
08/02
0
0
Mongodb 和 Scala 的入门指南

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json的bjson格式,因此可以存储比较复杂的数据...

红薯
2012/02/06
2.3K
6

没有更多内容

加载失败,请刷新页面

加载更多

网站安全维护公司对渗透测试php后门分析

很多想做渗透测试的朋友都想了解关于PHP后门漏洞的安全测试重点方法,以及该如何预防被中php后门,本节由我们的Sine安全高级渗透工程师进行全面的讲解,来让大家更好的理解和了解php代码的安全...

网站安全
12分钟前
5
0
在github上创建代码仓库时忘记添加.gitignore文件或修改了.gitignore该怎么办?

#清除本地缓存(改变成未track状态) #git rm -r --cached . 表示清除项目中所有文件的本地缓存 git rm -r --cached xxx #xxx表示不想版本控制的文件,比如小编可以输入test.o #.gitignore中的...

博爱飞扬
12分钟前
4
0
Fsimage 与 EditLog定义及合并过程

有很多客户端在向 hdfs 中写数据,同时有很多客户端在查数据,这就涉及到一个响应速度问题。因为只有一个 namenode ,客户端在写的时候,必须迅速记下来。 1. 向 namenode 询问可以存储到哪些...

Garphy
16分钟前
4
0
TI KeyStone C66x开发板处理器、NAND FLASH、NOR FLASH

TL6678F-EasyEVM是广州创龙基于SOM-TL6678F核心板而研发的一款多核高性能DSP+FPGA开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的8层板设计,尺寸为247.33mm*139.8mm,它为用户提...

Tronlong创龙
34分钟前
5
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第13题

Choose the best answer. Examine this query: SELECT TRUNC (ROUND(156.00,-2),-1) FROM DUAL; What is the result? A) 16 B) 160 C) 150 D) 200 E) 100 Answer:D (解析:关键就是 round ......

oschina_5359
44分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部