mongodb数据库

来源:互联网 发布:淘宝网贷口子 编辑:程序博客网 时间:2024/06/07 06:22

一.下载: 
     http://www.mongodb.org/dr/downloads.mongodb.org/win32/mongodb-win32-i386-2.4.6.zip/download
二、安装:


  2.1  将下载后的安装文件保存到d:/mongodb
               bin/  #运行命令
                    Mongod.exe 是用来连接到mongo数据库服务器的,即服务器端。
                    Mongo.exe 是用来启动MongoDB shell的,即客户端。
                    mongodump 逻辑备份工具。
                    mongorestore 逻辑恢复工具。
                    mongoexport  数据导出工具。
                    mongoimport  数据导入工具。
           自己创建data 存放数据   logs  存放日志


    然后通过cmd dos命令安装启动:


   Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.


C:\Documents and Settings\Administrator>d:


D:\>cd mongodb


D:\mongodb>cd bin


D:\mongodb\bin>D:\mongodb\bin>mongod.exe --dbpath 'd:\monogdb\data'
  上面的命令行中,
     --dbpath参数指出了数据库的目录
     --logpath则指出了日志存放的目录,
     --serviceName参数则指出了,命名安装的服务名为MongoDB.




注意: 
   Sat Sep 28 16:31:50.140 [initandlisten] MongoDB starting : pid=556 port=27017 db
path=d:\mongodb 32-bit host=cdhy03


Sun Sep 29 08:54:58.078 [initandlisten] waiting for connections on port 27017  数据库端口
Sun Sep 29 08:54:58.078 [websvr] admin web console waiting for connections on port 28017  web端口


   pid=556 表示进程id
   port=22017  表示端口好
   dbpath= d:\mongodb 表示数据库的存储目录地址
   host=cdhy03  表示服务器名


在浏览器输入http://127.0.0.1:27017/ 如果出现下面的描述表示安装成功!
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number


2.2 在windows中注册为服务
D:\mongodb\bin>mongod.exe --logpath "D:/mongodb/logs/mongodb.log" --logappend --dbpath "D:/mongodb/data" --directoryperdb --serviceName "MongoDB" --install
  
启动MongoDB:net start MongoDB


停止MongoDB:net stop MongoDB


三、卸载mongodb
      卸载服务的命令也很简单,如下:
    D:\mongodb>mongod --remove --serviceName "MongoDB"




四、简介:
   MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。


   MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。


   MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。


  传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。




五、特点:


  它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:


  1)面向集合存储,易存储对象类型的数据。


  2)模式自由。


  3)支持动态查询。


  4)支持完全索引,包含内部对象。


  5)支持查询。


  6)支持复制和故障恢复。


  7)使用高效的二进制数据存储,包括大型对象(如视频等)。


  8)自动处理碎片,以支持云计算层次的扩展性。


  9)支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。


  10)文件存储格式为BSON(一种JSON的扩展)。


  11)可通过网络访问。




六:mongo 命令


     mongodb 为我们提供的客户端管理工具是mongo.exe
  我们再开一个cmd,输入mongo命令打开shell,其实这个shell就是mongodb的客户端,同时也是一个js的编译器,默认连接的是“test”数据库。


#创建数据库:  use dbName;
             > use mycms;


#增加或修改用户密码:
        db.addUser('name','pwd');


> db.addUser('admin','123456');
{
        "user" : "admin",
        "readOnly" : false,
        "pwd" : "95ec4261124ba5951720b199908d892b",
        "_id" : ObjectId("524789a3dc13cad8d0e41c5f")
}


#增加或修改用户密码
      db.system.users.find();


#删除用户
      db.removeUser('name');


#用户认证
      db.auth('name','pwd'); 成功返回 1 否则返回 错误字符串


#查看所有用户
      show users;


#删除当前的数据库
      db.dropDatabase();


七、Mongodb添删改查操作 


数据库有了,下一步就是集合,这里就取集合名为“person”,要注意的就是文档是一个json的扩展(Bson)形式。 (注意和数据库的表做区别)


#插入数据 
    db.集合名.insert


> db.pserson.insert({'name':'zhanghua','age':31,'sex':'男'});
> db.pserson.insert({'name':'eduask','age':10,'sex':'男'});


#查找  
   db.集合名.find({集合单元});


#安全查找
> db.pserson.find();  
{ "_id" : ObjectId("52478b57dc13cad8d0e41c60"), "name" : "zhanghua", "age" : 31,
 "sex" : "男" }
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 10, "
sex" : "男" }
>


#按集合单元查找
> db.pserson.find({'name':'zhanghua'});
{ "_id" : ObjectId("52478b57dc13cad8d0e41c60"), "name" : "zhanghua", "age" : 31,
 "sex" : "男" }
 注意两点:
        ① “_id": 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性。


        ② 严格的按照Bson的形式书写文档,不过也没关系,错误提示还是很强大的。




#修改数据 update方法的第一个参数为“查找的条件”,第二个参数为“更新的值”
  db.集合名.update({},{});


> db.pserson.update({'name':'zhanghua'},{'name':'zhh','age':32});  
> db.pserson.find({'name':'zhanghua'});
> db.pserson.find();
{ "_id" : ObjectId("52478b57dc13cad8d0e41c60"), "name" : "zhh", "age" : 32 }
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 10, "
sex" : "男" }




#删除
   注意: 删除是必须带条件,否则将会全部删除,mongodb中是一个不可撤回的操作,三思而后行。


   db.集合名.remove({单元条件});


> db.pserson.remove({'name':'zhh'});
> db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 10, "
sex" : "男" }


#mongodb 修改命令:
   上面我们简单的讲了mongodb 的修改命令,在实际的开发中更新操作无非也就两种,整体更新和局部更新.
 像我们上面的命令就是属于整体更新,下面我们来看一个整个更新


全局更新:


> var p=db.pserson.findOne({'name':'eduask'});  #返回一个对象 注意大小写哦
> p.age; #对象集合访问属性
10
> p.age=8; #给对象集合属性重新赋值
8
> db.pserson.update({'name':'eduask'},p); #执行修改
> db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 8, "s
ex" : "男" }
>


局部更新:
  有时候我们仅仅需要更新一个字段,而不是整体更新,那么我们该如何做呢?easy的问题,mongodb中已经给我们提供了两个修改器: $inc 和 $set。
  ①  $inc修改器 (在原有的数字上面追加)


       $inc也就是increase的缩写,比如我们做一个在线用户状态记录,每次修改会在原有的基础上


      自增$inc指定的值,如果“文档”中没有此key,则会创建key.


    比如修改年龄:
  > db.pserson.update({'name':'eduask'},{$inc:{'age':10}});   #8+10=18
  > db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 18, "
sex" : "男" }
>


 ② $set修改器 (直接覆盖原来的值)
    
> db.pserson.update({'name':'eduask'},{$set:{'age':10}});
> db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 10, "
sex" : "男" }
>


 (3) upsert操作: 这是mongodb自己创造的一种修改方式,在修改的时候,如果没有找到要修改的语句就插入条语句。


> db.pserson.update({'name':'cdeduask'},{$inc:{'age':5}},true); #将第三个参数设为 true
> db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 5, "s
ex" : "男" }
{ "_id" : ObjectId("5247bc55583f17c9744e6e9d"), "age" : 5, "name" : "cdeduask" }


> db.pserson.update({'name':'cdeduas'},{$set:{'age':5}},true); #将第三个参数设为 true
> db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 5, "s
ex" : "男" }
{ "_id" : ObjectId("5247bc55583f17c9744e6e9d"), "age" : 5, "name" : "cdeduask" }


{ "_id" : ObjectId("5247bc7e583f17c9744e6e9e"), "age" : 5, "name" : "cdeduas" }
>


 (4)批量更新: 如果mongodb匹配多条数据,默认情况下,mongodb只更新一条语句,如果要批量更新的话,只需要在第四个参数设为true


> db.pserson.update({'name':'cdeduask'},{$inc:{'age':5}},true,true); 




#mongodb 查找命令 find()查找  findOne()查找一条
日常开发中,我们玩查询的条件操作符号
   >,     >=,     <,     <=,     !=,   =, And, OR,    In,  NotIn,all  这些操作在mongodb里面都封装好


  "$gt", "$gte", "$lt", "$lte", "$ne",        "$or", "$in","$nin",$all,$not 


案例说明:
  1--查询 name <> "bruce" and age >= 18 的数据
    db.users.find({name: {$ne: "bruce"}, age: {$gte: 18}}); 


  2--查询 creation_date > '2010-01-01' and creation_date <= '2010-12-31' 的数据
     db.users.find({creation_date:{$gt:new Date(2010,0,1), $lte:new Date(2010,11,31)}); 


  3--查询 age in (20,22,24,26) 的数据
     db.users.find({age: {$in: [20,22,24,26]}}); 


  4--查询 age取模10等于0 的数据
     db.users.find('this.age % 10 == 0'); 


   5--查询 age取模10不等于0 的数据
     db.users.find({age : {$not: {$mod : [10, 0]}}}); 


   6--查询不匹配name=B*带头的记录(使用正则表达式)
     db.users.find({name: {$not: /^B.*/}}); 


#查询年龄大于8岁的信息
> db.pserson.find({'age':{$gt:8}});  
{ "_id" : ObjectId("5247bd1575f5a56b099802fe"), "name" : "eduask", "age" : 20, "
sex" : "女" }


#查询年龄等于8岁的信息
> db.pserson.find({'age':8});
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 8, "s
ex" : "男" }


#下面我们来插入一条带数组模型的集合
>db.pserson.insert({'name':'zhanghua','age':31,'sex':'男','method':{'a':'aaaaa','b':'bbbbb'}});


> db.pserson.find();
{ "_id" : ObjectId("52478b7adc13cad8d0e41c61"), "name" : "eduask", "age" : 8, "s
ex" : "男" }
{ "_id" : ObjectId("5247bc55583f17c9744e6e9d"), "age" : 5, "name" : "cdeduask" }


{ "_id" : ObjectId("5247bc7e583f17c9744e6e9e"), "age" : 5, "name" : "cdeduas" }
{ "_id" : ObjectId("5247bd1575f5a56b099802fe"), "name" : "eduask", "age" : 20, "
sex" : "女" }
{ "_id" : ObjectId("5247c1aa2a849fa83aea4351"), "name" : "zhanghua", "age" : 31,
 "sex" : "男", "method" : { "a" : "aaaaa", "b" : "bbbbb" } }


注意: 由于mongodb采用的是json语法规则,所以强大的js语法也适用与mongodb
比如: 我们需要查询  name=zhanghua 的 method里面的a属性=aaaa的


> db.pserson.find({'name':'zhanghua',"method.a":"aaaaa"});  #"method.a"
{ "_id" : ObjectId("5247c1aa2a849fa83aea4351"), "name" : "zhanghua", "age" : 31,
 "sex" : "男", "method" : { "a" : "aaaaa", "b" : "bbbbb" } }
>
我们也可以使用 $in 来包含取值(同一个属性有多个值的时候)


> db.pseron.find({'method.a':{$in:['a','aa','aaa']}});


#$where 条件处理复杂查询
   查找name='cdeduask'
 >db.pseron.fin({$where:function(){
   return this.name='jack'
}});


八、mongodb高级操作


   8.1 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce
     
     全聚合文档统计查询:  db.pserson.count();
     条件聚合统计查询:  db.p


 
 





































0 0
原创粉丝点击