MongoDB应用学习

MongoDB应用学习

创建数据库可以直接使用use test

但是这个时候show dbs是看不到的,只有加入了数据才算真正创建了。

 

collection对应mysql中表的概念

collection中每条数据在生成的时候会自行生成_id的字段

 

db.pet.find()

相当于select * from pet

> db.pet.find() 
{ "_id" : ObjectId("513d489ff596e5c47cf26c28"), "Id" : "1", "Name" : "cat1", "skill" : "2" }

db.pet.find(<json>)

代表select * from pet where XXX

> db.pet.find({_id : ObjectId("513d489ff596e5c47cf26c28")}) 
{ "_id" : ObjectId("513d489ff596e5c47cf26c28"), "Id" : "1", "Name" : "cat1", "skill" : "2" }

db.pet.findOne({'Id': '2'})

只查找一个

 

增删改查分别对应

save

remove

update

find/findOne

 

db.currentOp来获取当前操作线程的相关信息

创建索引有两种方法:

db.system.indexes.insert(XXX)

db.system.ensureIndex(XXXX)

第二种更常用

索引和mysql的索引一样,是按照B+树来排序的,所以需要设置B+树的顺序,排列顺序为从小到大设置为1,排列顺序为从大到小设置为-1

 

mongo的索引分为三种:

唯一索引

松散索引(null行不加入索引)

多值索引(可以对一个array进行索引)

http://blog.nosqlfan.com/html/3656.html

 

索引在后台创建

db.values.ensureIndex({open: 1, close: 1}, {background: true})

 

mongodb中各个结构是有提供各自的api的,具体需要参考:

http://api.mongodb.org/js/2.3.2/index.html

 

查询一个collection中某个字段有哪些值:

> db.pet.distinct("skill") 
[ "1", "2" ]

只显示一些字段:

> db.pet.find({},{'skill':1}) 
{ "_id" : ObjectId("513d4adbf596e5c47cf26c2b"), "skill" : "1" } 
{ "_id" : ObjectId("513d489ff596e5c47cf26c28"), "skill" : "2" }

这里的_id是默认的Id,必须要显示出来的

mysql中limit start,num

> db.pet.find().skip(1).limit(1) 
{ "Id" : "1", "Name" : "cat1", "_id" : ObjectId("513d489ff596e5c47cf26c28"), "pic" : "noooo", "skill" : "2" }

 

MongoDB语法 MySql语法

db.test.find({'name':'foobar'})<==> select * from test where name='foobar'

db.test.find() <==> select *from test

db.test.find({'ID':10}).count()<==> select count(*) from test where ID=10

db.test.find().skip(10).limit(20)<==> select * from test limit 10,20

db.test.find({'ID':{$in:[25,35,45]}})<==> select * from test where ID in (25,35,45)

db.test.find().sort({'ID':-1}) <==> select * from test order by IDdesc

db.test.distinct('name',{'ID':{$lt:20}}) <==> select distinct(name) from testwhere ID<20

db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}}) <==> select name,sum(marks) from testgroup by name

db.test.find('this.ID<20',{name:1}) <==> select name from test whereID<20

db.test.insert({'name':'foobar','age':25})<==>insertinto test ('name','age') values('foobar',25)

db.test.remove({}) <==> delete * from test

db.test.remove({'age':20}) <==> delete test where age=20

db.test.remove({'age':{$lt:20}}) <==> elete test where age<20

db.test.remove({'age':{$lte:20}}) <==> delete test where age<=20

db.test.remove({'age':{$gt:20}}) <==> delete test where age>20

db.test.remove({'age':{$gte:20}})<==> delete test where age>=20

db.test.remove({'age':{$ne:20}}) <==> delete test where age!=20

db.test.update({'name':'foobar'},{$set:{'age':36}})<==> update test set age=36 where name='foobar'

db.test.update({'name':'foobar'},{$inc:{'age':3}})<==> update test set age=age+3 where name='foobar'

from:http://blog.csdn.net/shellching/article/details/7651979

 

php安装mongo需要使用扩展

文档在这里:

http://docs.mongodb.org/ecosystem/drivers/php/

php的mongo扩展的使用文档在这里:

http://blog.mongodb.org/post/24960636131/mongodb-for-the-php-mind-part-1

本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

 

随笔分类 -开源研究

MongoDB应用学习

2013-03-18 14:15 by 轩脉刃, 671 visits, 网摘收藏编辑
摘要:创建数据库可以直接使用use test 但是这个时候show dbs是看不到的,只有加入了数据才算真正创建了。 collection对应mysql中表的概念 collection中每条数据在生成的时候会自行生成_id的字段 db.pet.find() 相当于select * from pet > db.pet.find() { "_id" : ObjectId("513...  阅读全文

关于websocket

2013-03-11 09:54 by 轩脉刃, 803 visits, 网摘收藏编辑
摘要:这个是一次组内分享,关于websocket的协议和应用的。文章在分享之前就写好了,整理下放出来。对应的PPT地址是:http://websocket.funaio.com从推送技术开始说一篇文章10 Years of Push Technology, Comet, and WebSockets(http://cometdaily.com/2011/07/06/push-technology-comet-and-websockets-10-years-of-history-from-lightstreamers-perspective/)非常详细的说明清楚了从1996-2007年推送技术的更新。  阅读全文

聊天室服务分析设计

2013-03-05 09:52 by 轩脉刃, 2655 visits, 网摘收藏编辑
摘要:如果你需要写一个简单的聊天室的服务,那么我想很多网上的demo都可以直接拿来用。但是如果你要做的是给线上百万甚至千万级用户用的服务,那么,整个结构和聊天室Demo是必然不一样的。本文就从设计一个大用户量的聊天室服务的角度出发来思考。 分布式? 首先用户量大必然先考虑的问题是服务是单进程还是多进程,单机器还是多机器,单进程代表的是单机上跑一个服务,单机器代表的是单机上跑一个或者多个服务,这两种方...  阅读全文

CGI的一些知识点

2012-12-24 11:31 by 轩脉刃, 1215 visits, 网摘收藏编辑
摘要:CGI(Common Gateway Interface)是能让web服务器和CGI脚本共同处理客户的请求的协议。它的协议定义文档是http://www.ietf.org/rfc/rfc3875。 其中Web服务器负责管理连接,数据传输,网络交互等。至于CGI脚本就负责管理具体的业务逻辑。 Web服务器的功能是将客户端请求(HTTP Request)转换成CGI脚本请求,然后执行脚本,接着将CGI...  阅读全文

mysql那些招

2012-11-22 13:04 by 轩脉刃, 1268 visits, 网摘收藏编辑
摘要:show table status mysql官方文档在 http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html 这里的rows行是表的行数,但是实际上是不准的。myisam是准的,其他的存储引擎是不准的。要准确的行数就需要使用count(*) 来获取了。 mysql执行大批量删除 执行大批量删除的时候注意要使用上limit 因为如果不用limit,删除大量数据很有可能造成死锁 如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库 ps: 平时update和delete的时候最好也加...  阅读全文

为什么使用框架

2012-09-25 18:09 by 轩脉刃, 2317 visits, 网摘收藏编辑
摘要:这是一篇翻译文章,原文说明了框架在开发过程中给使用带来的懒惰,不思维的弊病。文章来源:http://blog.8thlight.com/myles-megyesi/2012/09/12/why-frameworks.html ===========正文开始 我们是由于效率和易用性的考虑才产生框架。框架能节省开发时间。框架强制使用公共的约定,因此它能有效地解决一些共有的问题,比如页面渲染,ass...  阅读全文

Golang Http Server源码阅读

2012-08-22 15:04 by 轩脉刃, 2469 visits, 网摘收藏编辑
摘要:这篇文章出现的理由是业务上需要创建一个Web Server。创建web是所有语言出现必须实现的功能之一了。在nginx+fastcgi+php广为使用的今天,这里我们不妨使用Go来进行web服务器的搭建。 前言 使用Go搭建Web服务器的包有很多,大致有下面几种方法,直接使用net包,使用net.http包,使用第三方包(比如gorilla)。使用net包就需要从tcp层开始封装,耗费人力物力极大...  阅读全文

Linux IO模型漫谈(2)

2012-05-31 09:57 by 轩脉刃, 1085 visits, 网摘收藏编辑
摘要:不管Linux的IO模型的阻塞同步分类是如何分类,几种IO模型的具体实现是确定的。这里借用《Unix 网络编程:卷一》的图片说明。 1 阻塞式IO模型 这个模型也是最容易理解的 程序调用和我们基本的程序编写是一致的: fd = connect() write(fd) read(fd) close(fd) 程序的read必须在write之后执行,当write阻塞住了,read就不能执行下去 2 非阻塞IO模型 从图中可以看出来,这是一个轮询的过程 每次用户询问内核是否有数据报准备好(文件描述符缓冲区是否就绪),当数据报准备好的时候,就进行拷贝数据报的操作。当数据报没...  阅读全文

Unix家族编年史

2012-05-30 13:30 by 轩脉刃, 1300 visits, 网摘收藏编辑
摘要:Unix是多用户、多任务的操作系统,它的历史悠久,也有多种版本。在Unix接触过程中常使用到的词,BSD,Linux等。初学者,甚至是接触unix很久的用户也未必对其家谱了如指掌。这篇文章描述的是Unix的族谱和发展历史。 1969年,Unix的前身Unics出现 作者: 肯·汤普逊(左)和丹尼斯·里奇(右) Unix版本是由美国电话电报公司(AT&T)进行维护升级的。他们两位是AT&...  阅读全文

Linux IO模型漫谈(1)

2012-05-29 11:20 by 轩脉刃, 1568 visits, 网摘收藏编辑
摘要:基础知识 Linux将所有外部设备都看做一个文件来进行操作。因此,linux对所有外部设备的操作都可以看做是文件的操作。文件的操作当然需要有个标示描述它,这就是文件描述符(file descriptor)。 linux的IO操作如何形象理解呢? 我们说网络socket的read()是一个IO操作命令,具体流程是这样的: 应用程序调用read命令,通知内核需要做读取数据操作 内核创建一个文件描述符 内核从物理层收到读数据的命令,从网络中获取数据包 数据包传递到TCP/IP层,解析数据包的头 内核将数据包缓存在文件描述符的读缓存区(接受缓存区)中,注意这里的读缓存区是在内核中的 ...  阅读全文

Lua的协同程序

2012-05-28 15:39 by 轩脉刃, 1553 visits, 网摘收藏编辑
摘要:Lua是一种简单,可扩展,可移植及高效的脚本语言。在嵌入式系统,移动设备,web服务器,游戏等方面都能见到它的身影。lua其中最吸引人的一点事它能很方便地与C语言或者其他语言。 这里说的是lua语言中的协同程序(coroute),也有人翻译成为协作程序 基本函数和语法 coroutine就是lua的协同程序 先讲一下coroutine的语法: coroutine.create() 创建coroutine,返回coroutine, 参数是一个函数,当和resume配合使用的时候就唤醒函数调用 coroutine.resume() 重启coroutine,和create配合使用...  阅读全文

nginx模块_使用gdb调试nginx源码

2012-05-10 16:45 by 轩脉刃, 2158 visits, 网摘收藏编辑
摘要:工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段。 ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正。 熟悉gdb的使用 这里就不说了,谷歌一搜一堆,这里推荐一篇文章:GDB 命令详细解释 请重点看一下step,run,break,list,info,continue命令 下载nginx源码 这里使用nginx-1.0.14 src是源代码,auto文件夹是configure运行时候的各种命令集合 修改config并编译 由于gdb需要gcc的时候加上-g参数,这样生成的文件才能使用gdb调试,因此...  阅读全文
分类:  开源研究

你可能感兴趣的:(mongodb)