很全的 Mongodb数据库学习文档 与 php操作mongodb
- 格式:doc
- 大小:83.50 KB
- 文档页数:19
PHP操作MongoDB配置与学习笔记PHP操作MongoDB配置与学习笔记有需要的朋友可参考参考。
Mongo主要解决的是海量数据的访问效率问题,根据官方的文档,当数据量达到50GB以上的时候,Mongo的数据库访问速度是MySQL的10倍以上2,安装(windows only)到官网下载对应的包解压到d:mongodb创建d:mongodbdata放置数据文件3,运行mongodbd:mongodbbin下有一些可执行文件,其中mongod.exe是服务器端,mongo.exe是客户端。
运行cmd,输入d:mongodbbin>mongod.exe -dbpath d:mongodbdata服务器成功启动4,让php支持MongoDB下载php_mongo.dll,注意版本,php5.3.x应该支持v9的(有些老资料让apache的下v6,其实要看看phpinfo后下载对应的版本);修改php.ini,增加extension = php_mongo.dll;重启apache.代码如下复制代码<?php/*** PHP操作MongoDB学习笔记* 2011年2月23日* 原作者:xiaocai*///*************************//** 连接MongoDB数据库服务器//*************************//格式=>("mongodb://用户名:密码@地址:端口/默认指定数据库",参数)$conn = new Mongo();//可以简写为//$conn=new Mongo(); #连接本地主机,默认端口.//$conn=new Mongo("172.21.15.69"); #连接远程主机//$conn=new Mongo("xiaocai.loc:10086"); #连接指定端口远程主机//$conn=new Mongo("xiaocai.loc",array("replicaSet"=>true)); #负载均衡//$conn=new Mongo("xiaocai.loc",array("persist"=>"t")); #持久连接//$conn=new Mongo("mongodb://sa:123@localhost"); #带用户名密码//$conn=new Mongo("mongodb://localhost:27017,localhost:27018"); #连接多个服务器//$conn=new Mongo("mongodb:///tmp/mongo-27017.sock"); #域套接字//$conn=new Mongo("mongodb://admin_miss:miss@localhost:27017/test",array('persist'=>'p',"replicaSet"=>true)); #完整//*************************//** 选择数据库与表//*************************$db=$conn->mydb; #选择mydb数据库//$db=$conn->selectDB("mydb"); #第二种写法$collection=$db->column; #选择集合(选择'表')//$collection=$db->selectCollection('column'); #第二种写法//$collection=$conn->mydb->column; #更简洁的写法//注意:// 1.数据库和集合不需要事先创建,若它们不存在则会自动创建它们.// 2.注意错别字,你可能会无意间的创建一个新的数据库(与原先的数据库混乱).//*************************//** 插入文档//*************************//**向集合中插入数据,返回bool判断是否插入成功. **/$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai');$result=$collection->insert($array); #简单插入echo "新记录ID:".$array['_id']; #MongoDB会返回一个记录标识var_dump($result); #返回:bool(true)#插入结果:{ "_id" : ObjectId("4d63552ad549a02c01000009"), "column_name" : "col770", "column_exp" : "xiaocai" }#'_id'为主键字段,在插入是MongoDB自动添加.//**向集合中安全插入数据,返回插入状态(数组). **/$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai2');$result=$collection->insert($array,true); #用于等待MongoDB完成操作,以便确定是否成功.(当有大量记录插入时使用该参数会比较有用)echo "新记录ID:".$array['_id']; #MongoDB会返回一个记录标识var_dump($result); #返回:array(3) { ["err"]=> NULL ["n"]=> int(0) ["ok"]=> float(1) }//**插入的完整语法**/# insert(array $data,array('safe'=>false,'fsync'=>false,'timeout'=>10000))# 参数说明:safe:默认false,是否安全写入;fsync:默认false,是否强制插入到同步到磁盘;timeout:超时时间(毫秒) //**以下两次插入的为同一条记录(相同的_id),因为它们的值相同**/$collection->insert(array('column_name'=>'xiaocai'));$collection->insert(array('column_name'=>'xiaocai'));#避免方法,安全插入$collection->insert(array('column_name'=>'xiaocai'),true);try {$collection->insert(array('column_name'=>'xiaocai'),true);}catch(MongoCursorException $e){echo "Can't save the same person twice!n";}//详细资料:/manual/zh/mongocollection.insert.php//*************************//** 更新文档//*************************//** 修改更新**/$where=array('column_name'=>'col123');$newdata=array('column_exp'=>'GGGGGGG','column_fid'=>444);$result=$collection->update($where,array('$set'=>$newdata)); #$set:让某节点等于给定值/** 原数据* {"_id":ObjectId("4d635ba2d549a028********"),"column_name":"col123","column_exp":"xiaocai"}* 被替换成了*{"_id":ObjectId("4d635ba2d549a028********"),"column_name":"col123","column_exp":"GGGGGGG","column_fid":444} *///** 替换更新**/$where=array('column_name'=>'col709');$newdata=array('column_exp'=>'HHHHHHHHH','column_fid'=>123);$result=$collection->update($where,$newdata);/** 原数据* {"_id":ObjectId("4d635ba2d549a028********"),"column_name":"col709","column_exp":"xiaocai"}* 被替换成了* {"_id":ObjectId("4d635ba2d549a028********"),"column_exp":"HHHHHHHHH","column_fid":123}*///** 批量更新**/$where=array('column_name'=>'col');$newdata=array('column_exp'=>'multiple','91u'=>684435);$result=$collection->update($where,array('$set'=>$newdata),array('multiple'=>true));/*** 所有'column_name'='col'都被修改*///** 自动累加**/$where=array('91u'=>684435);$newdata=array('column_exp'=>'edit');$result=$collection->update($where,array('$set'=>$newdata,'$inc'=>array('91u'=>-5)));/*** 更新91u=684435的数据,并且91u自减5* 注意:91u存在时加上-5,不存在时就设置91u=-5*///** 匹配到就更新,否则新增**/$c->update(array("name" => "joe"),array("username" => "joe312", "createdAt" => new MongoDate()),array("upsert" => true) #up(date)(in)sert);/** 删除节点**/$where=array('column_name'=>'col685');$result=$collection->update($where,array('$unset'=>'column_exp'));/*** 删除节点column_exp*//** 附加新数据到节点**/$coll->update(array('b'=>1),array('$push'=>array('a'=>'wow')) #附加新数据到节点a);# 如果对应节点是个数组,就附加一个新的值上去;不存在,就创建这个数组,并附加一个值在这个数组上;# 如果该节点不是数组,返回错误。
PHP7MongoDb的操作类php mongodb操作类找了很久,找不到合适⽤的(有的都是旧版mongo的,不是mongoDb的,吐⾎~),硬着头⽪在2G的⽹络翻遍了不太好看的PHP官⽅⽂档,写了个简单的操作类,测试也简单地测试了⼀下,其他更多的操作和功能,还是得去翻官⽅⽂档...<?php/*** @author Administrator* @date 2020/9/1 15:24* @desciption:mongodb 操作类*/declare(strict_types=1);class MongoDb{public static$_instance = null;public$conf = null;public$handle = null;public$_and = [];public$_or = [];public$collection = "";public$limit = 0;public$skip = 0;public$_field = [];public$_sort = [];public static function getInstance($conf = null){if(self::$_instance === null){self::$_instance = new self($conf);}return self::$_instance;}private function __construct($conf=null){$this->conf = $conf;if(!isset($this->conf["type"]) || empty($this->conf["type"])){$this->conf["type"] = "mongodb";}$this->connect();}public function connect(){if(!empty($this->conf["user"]) && !empty($this->conf["password"])){$uri = "{$this->conf["type"]}://{$this->conf["user"]}:{$this->conf["password"]}@";}else{$uri = "{$this->conf["type"]}://";}$uri .= "{$this->conf['host']}:{$this->conf['port']}/{$this->conf["db"]}";try {$this->handle = new MongoDB\Driver\Manager($uri);}catch (Exception$exception){throw new Exception($exception->getMessage());}}public function collection(string$collection){$this->collection = $this->conf["db"] . "." . $collection;return$this;}public function where(array$where){if(empty($where)){$this->echoError(new Exception("param where is empty"));}$this->_and = array_merge($this->_and,$where);return$this;}public function orWhere(array$where){if(empty($where)){$this->echoError(new Exception("param where is empty"));}$this->_or = array_merge($this->_or,$where);return$this;}public function limit(int $limit){$this->limit = $limit;$this->skip = $skip;return$this;}public function field(string$field,bool $_id=true){if(!empty($field)){$fieldArr = explode(",",$field);if(is_array($fieldArr)){foreach($fieldArr as$val){$this->_field[$val] = 1;}}}if(!$_id){$this->_field["_id"] = 0;}return$this;}public function sort(string$field,int $sort){$this->_sort["field"] = $field;$this->_sort["rule"] = $sort;return$this;}public function find(){return$this->query();}public function findOne(){$this->limit = 1;$this->skip = 0;return$this->query();}public function count(){$filter = $this->getWhere();$aggregate = ["aggregate"=>str_replace($this->conf["db"].".","",$this->collection), "pipeline" => [['$match'=>$filter],['$count'=>"count"],],"cursor" => (object)array()];$command = new \MongoDB\Driver\Command($aggregate);$result = $this->command($this->conf["db"],$command);return$result ? $result->toArray()[0]->count : false;}public function sum(string$field){$filter = $this->getWhere();$aggregate = ["aggregate"=>str_replace($this->conf["db"].".","",$this->collection), "pipeline" => [['$match' => $filter],['$group' => ['_id' => '','total' => ['$sum' => '$' . $field],]],],"cursor" => (object)array()];$command = new \MongoDB\Driver\Command($aggregate);$result = $this->command($this->conf["db"],$command);return$result ? $result->toArray()[0]->total : false;}public function getWhere(){$filter = [];if(!empty($this->_and)){$filter = array_merge($filter,$this->_and);}if(!empty($this->_or)){foreach($this->_or as$key =>$val) {$filter['$or'][][$key] = $val;}}$filter = $this->getWhere();if(!empty($this->_field)){$queryOptions["projection"] = $this->_field;}if(!empty($this->_sort)){$queryOptions["sort"] = [$this->_sort["field"]=>$this->_sort["rule"]];}if($this->limit > 0){$queryOptions["limit"] = $this->limit;}if($this->skip > 0){$queryOptions["skip"] = $this->skip;}$query = new MongoDB\Driver\Query($filter,$queryOptions);return$query;}public function query(){$query = $this->getQuery();try {$result = $this->handle->executeQuery($this->collection,$query);}catch (\Exception$exception){$this->echoError($exception);$result = false;}$this->init();return$result?:false;}/*** @param array $data* @param bool $batch 是否批量* @return mixed*/public function insert(array$data,bool $batch=false){$write = new MongoDB\Driver\BulkWrite();if($batch){foreach($data as$val){$write->insert($val);}}else{$write->insert($data);}$result = $this->execute($this->collection,$write);return$result ? $result->getInsertedCount() : false;}/*** @param array $update* @param bool $multi true 匹配所有⽂档 false 匹配⼀个* @param bool $upsert true 匹配不到将插⼊* @return bool* @throws Exception*/public function update(array$update,bool $multi = false, bool $upsert = true){if(empty($this->_and)){$this->echoError(new Exception("update where is empty"));}$write = new MongoDB\Driver\BulkWrite();$write->update($this->_and,['$set'=>$update],['multi' => $multi, 'upsert' => $upsert]);$result = $this->execute($this->collection,$write);return$result ? $result->getUpsertedCount() + $result->getMatchedCount() : false; }public function delete(bool $all=false){if(empty($this->_and)){$this->echoError(new Exception("delete where is empty"));}$write = new MongoDB\Driver\BulkWrite();$write->delete($this->_and,['limit'=>$all]);$result = $this->execute($this->collection,$write);return$result ? $result->getDeletedCount() : false;}/*** @param array $pipeline* '$match' => [* 'time' => ['$lt'=>1598864580]* ],* ],* [* '$group' => [* "_id"=>'$time', "total" => ['$sum' => 1]* ],* ],* [* '$limit' => 3* ],* [* '$sort' => ['total' => -1]* ]* ]* @return bool*/public function aggregate(array$pipeline){$aggregate = ["aggregate"=>str_replace($this->conf["db"].".","",$this->collection),"pipeline" => $pipeline,"cursor" => (object)array()];$command = new \MongoDB\Driver\Command($aggregate);$result = $this->command($this->conf["db"],$command);return$result ? $result->toArray() : false;}public function execute($namespace,$object){try {$result = $this->handle->executeBulkWrite($namespace,$object);}catch (\Exception$exception){$this->echoError($exception);}$this->init();return$result;}public function command($db,$command){try {$result = $this->handle->executeCommand($db,$command);}catch (\Exception$exception){$this->echoError($exception);}$this->init();return$result;}public function echoError(Exception$exception){throw new Exception($exception->getMessage());}public function init(){$this->_and = [];$this->_or = [];$this->collection = "";$this->limit = 0;$this->skip = 0;$this->_field = [];$this->_sort = [];}}//$db = MongoDB::getInstance([// "type" => "mongodb",// "host" => "127.0.0.1",// "port" => "27017",// "db" => "db",// "user" => "",// "password" => ""//]);//查询//$result = $db->collection("message")->Where(["time"=>['$lte'=>1598864449]])->sort("time",-1)->find(); //$result = $db->collection("message")->Where(["time"=>['$lte'=>1598864449]])->count();//$result = $db->collection("message")->Where(["time"=>['$lte'=>1598864449]])->sum("time");//写⼊//$result = $db->collection("message")->insert([// "from" => "a",// "type" => "write",//更新//$result = $db->collection("message")->where(["from"=>"a"])->update(["type"=>"ssd"]); //删除//$result = $db->collection("message")->where(["from"=>"a"])->delete();//aggregate 聚合//$result = $db->collection("message")->aggregate([// ['$match'=>['time'=>['$gte'=>1598955498]]],// ['$group' => ["_id"=>'$time', "total" => ['$sum' => 1]]]//]);//var_dump($result);发现有错误的地⽅,欢迎指正⼀下~~。
MongoDB数据库入门教程作为一款非关系型的分布式数据库,MongoDB备受广大开发者的喜爱。
它不仅提供了高性能的数据处理和存储服务,而且还具有灵活的数据结构以及强大的查询语言等特点。
如果你也想拥有这样一个全能型的数据库,那么接下来的MongoDB数据库入门教程将会为你提供实用的知识和技能。
一、安装MongoDB在学习MongoDB之前,你需要先进行安装和配置。
可以通过官方网站下载相应的安装程序,然后进行简单的操作即可完成安装。
此外,还需要设置环境变量等相关配置,以确保在使用时的正常运行。
二、建立数据库创建数据库是MongoDB的第一步,这里以“school”为例,讲解如何建立一个数据库。
在CMD命令行中输入“mongod”命令,并通过“mongo”命令进入命令行终端,使用以下命令建立“school”数据库。
> use school三、建立集合集合是数据组织的最基本单位,可以看作是表的概念。
在MongoDB中,集合可以无限制地扩展,不需要提前设置结构,非常灵活。
我们可以通过以下命令创建一个“students”集合。
> db.createCollection(\"students\")四、插入文档把文档插入到集合中是MongoDB中最简单、最常见的操作之一。
MongoDB 的文档是以键值对的形式计数的,这里以学生作为一个文档进行插入,使用以下命令插入一个学生的信息。
> db.students.insert({name:\"Tom\",age:18,gender:\"male\"})五、查询文档MongoDB提供了丰富的查询语言,可以满足各种查询需求。
这里以查询年龄为18岁的学生的信息为例。
> db.students.find({age:18})六、更新文档MongoDB可以对集合中的文档进行更新,具体实现可以使用update()函数。
PHP与MongoDB的操作在php的mongo扩展中,提供了4类接口(对象):1,针对mongoDB连接的操作:Mongo/manual/en/class.mongo.php2,针对mongoDB中数据库的操作:MongoDB/manual/en/class.mongodb.php3,针对mongoDB中collection的操作:MongoCollection/manual/en/class.mongocollection.php4,针对查询结果集的操作:MongoCursor/manual/en/class.mongocursor.php1.PHP连接MongoDB直接实例化mongo类+创建连接:$mo=new Mongo();//得到一个Mongo连接对象实例化了一个Mongo类,并且与默认的localhost:27017端口的mongoDB建立连接。
如果想连接到其他的主机,可以这样写:$mongo=newMongo("mongodb://username:password@192.168.1.22:12345");另外一种方式,实例化mongo类,再手动建立连接:$mongo=newMongo("mongodb://username:password@192.168.1.22:12345",array('connect'=>false));//初始化类$mongo->connect();//创建连接Mongo类中有用的一些方法:Mongo::listDBs()/manual/en/mongo.listdbs.php返回一个包含当前mongo服务上的库(DB)信息的数组。
$mo=new Mongo();$dbs=$mo->listDBs();//获得一个包含db信息的数组Mongo::selectCollection($db,$coll)/manual/en/mongo.selectcollection.php返回一个当前连接下的某db中的collection对象。
MongoDB使用目录目录 (1)一、传统数据库技术回顾 (2)二、NoSQL (4)三、MongoDB介绍安装 (6)四、数据库使用 (9)4.1 插入数据 (10)4.2 查找数据 (10)4.3 修改数据 (14)4.4 删除数据 (15)一、传统数据库技术回顾数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库?理由之1:数据库有行、列的概念,数据有关系,数据不是散的。
老牌数据库,比如MySQL、SQL Server、Oracle、Access。
这些数据库,我们管他们叫做结构型数据库。
为什么?因为每个表中,都有明确的字段,每行记录,都有这些字段。
不能有的行有,有的行没有。
理由二:数据库能够提供非常方便的接口,让增删改查操作变得简单我们的老牌数据库,都无一例外的使用SQL语言,管理数据库。
SQL就是structure query language。
比如,查询所有女生:SELECT * FROM step1 WHERE sex= '女';再比如,查询所有女生,并且年龄20~24之间,且在北京:1SELECT * FROM step1 WHERE xingbie = '女' AND nianling < 24 AND nianling >= 20 AND xianzaisuozaidi = '北京';理由之三:数据库不能自己玩儿,要给向PHP、.net、jsp等语言提供接口。
用php这些语言,能够向数据库之中增删改查。
老牌数据库,都是结构型数据库,现在出了什么问题?比如,我们现在想往一个已经有1000条数据的数据库中增加一个字段“高中信息”。
之前已经存在的数据,实际上不需要增加这个字段。
因为这些用户已经填写完毕表单了,不需要再手机高中信息了。
我们的意图就是在今后注册的用户,需要填写高中信息。
但是,我们刚才说了,所谓的字段,是表的一个结构。
PHP操作MONGODB详细文档1.MONGDB的启动从命令行启动mongoDB服务器使用可执行文件mongod,mongod有很多的启动选项,运行mongod --help可以查看这些选项,下边是常用的重要选项:--dbpath 指定数据目录,缺省为/data/db/。
每个mongod进程都需要自己的数据目录,如果你要运行3个mongod的实例,那么就需要3个独自的目录。
mongod启动的时候会在数据目录创建一个mongod.lock文件,阻止其他进程使用此目录。
--port 指定服务器侦听的端口号。
mongod缺省使用27017端口,如果你要运行多个实例,需要给每个进程指定不同的端口。
--fork 创建服务器子进程,以守护进程的方式运行服务。
--logpath 将输出写入指定文件而不是控制台。
如果文件不存在,将会创建此文件,如果文件已存在,文件将会被覆盖,旧的内容会被清除掉。
如果想保留旧的内容,另外需要使用–-logappend 设定MONGODB的LOG为追加模式--config 从配置文件读取启动选项,下边是一个配置文件的示例,#之后的为注释# Start MongoDB as a daemon on port 5586port = 5586fork = true # daemonize it!logpath = mongodb.log2.关闭MONGODB停止服务器最基本的方式是向进程发送一个SIGINT或SIGTERM信号。
如果服务是作为前台进程运行的,那么可以按Ctrl-C,否则可以通过命令如kill来发送信号。
另外一个办法是使用shutdown命令,这个命令必须在admin数据库上运行。
> use adminswitched to db admin> db.shutdownServer();server should be down...3.添加用户与权限验证开启MongoDB客户端;> use admin> db.addUser("ixigua", "hi.baidu")> db.auth("ixigua", "hi.baidu")查看已存在的用户的命令:> ers.find()现在,来给另一个数据库virusDB 配置一个读写权限的用户> use virusDB> db.addUser("virus", "passwordForVirus")配置一个只读权限的用户. (only supported in 1.3.2+)> use db_ixigua> db.addUser("guest", "passwordForReadonly", true)更改密码利用 addUser 命令来更改一个已存在用户的密码> use db_ixigua> db.addUser("guest", "change_passwordForReadonly", true)利用下面的命令可以看到刚才创建的两个用户> ers.find()删除用户的命令ers.remove( { user: username } )> ers.remove( {user:"guest"} );小知识:在admin库里面添加用户是全局的,也就是说在admin中添加用户,在其他库里面也是适用的。
mongodb操作手册MongoDB是一种流行的文档型数据库,逐渐成为许多公司的首选。
但是,操作MongDB可能对新手来说有些棘手。
下面将为你提供MongoDB操作手册,以帮助你更高效地操作MongoDB。
1. 安装MongoDB首先,你需要安装MongoDB。
在MongoDB官网下载传递给操作系统的安装包(Windows、Linux或Mac OS),然后按照安装向导完成安装。
2. 启动MongoDB一旦安装完成,你便可以启动MongoDB。
在命令行中输入mongod 命令,这将启动MongoDB服务。
mongodb://localhost:27017是默认的MongoDB连接字符串。
这将启动默认的MongoDB实例,并连接到localhost上的端口27017。
3. 创建数据库当你成功启动MongoDB服务之后,你可以创建你的数据库。
使用MongoDB的命令createDatabase()可以轻松创建一个新的数据库。
只需在命令行中输入以下命令:> use mydatabasemydatabase是你所创建的数据库名称。
4. 插入数据在创建数据库之后,你可以开始向数据库中插入数据。
使用insert()命令,可以将数据插入到指定的集合中。
如下所示:> db.myCollection.insert( { name: "Tom", age: 25 } )这将在myCollection集合中插入一条数据。
注意,如果指定的集合还不存在,MongoDB会自动创建该集合。
5. 查询数据当你插入了许多数据之后,你可能需要查询数据。
使用find()命令,可以查找指定集合中的数据。
如下所示:> db.myCollection.find()这将为你提供myCollection集合中的所有文档。
你也可以使用过滤器,如下所示:> db.myCollection.find( { name: "Tom" } )这将为你提供名称为Tom的所有文档。
MongoDB主从复制是一种常见的数据库复制技术,它能够实现数据的备份和同步,提高系统的可扩展性和可靠性。
在PHP 中,我们可以通过使用MongoDB驱动程序来实现主从复制的自动切换。
以下是一个简单的步骤指南,指导您在PHP中实现mongodb主从复制自动切换的方法。
一、安装并配置MongoDB驱动程序首先,您需要在PHP项目中安装MongoDB驱动程序。
您可以从官方网站下载适合您操作系统的驱动程序,并按照说明进行安装和配置。
确保您的PHP环境能够与MongoDB驱动程序正常通信。
二、创建主从数据库设置在实现主从复制之前,您需要创建主从数据库设置。
这包括主数据库的连接信息和从数据库的连接信息。
您需要确保主数据库正常运行,并能够接受来自从数据库的连接请求。
三、实现自动切换功能一旦您建立了主从数据库的连接,您需要实现自动切换功能,以便在主数据库故障时自动切换到从数据库。
您可以使用PHP中的条件语句和函数来实现这一功能。
当检测到主数据库故障时,您可以执行相应的切换操作,并连接到从数据库。
以下是一个简单的示例代码,演示如何在PHP中实现mongodb主从复制的自动切换:```php<?php// 连接到主数据库$mongo = newMongoDB\Driver\Manager("mongodb://localhost:27017");// 执行查询操作...// 检测主数据库状态$isMasterHealthy = isMasterHealthy($mongo);if (!$isMasterHealthy) {// 主数据库故障,切换到从数据库$mongoSlave = newMongoDB\Driver\Manager("mongodb://localhost:27018");// 执行查询操作...}>```在上面的示例中,我们使用`isMasterHealthy()`函数来检测主数据库的状态。
mongodb数据库基础操作1. 连接到 MongoDB:使用 MongoDB 驱动程序连接到数据库。
你需要安装相应的 MongoDB 驱动程序,并在代码中指定连接字符串。
2. 创建数据库和集合(类似于表):```javascript// 创建数据库use myDatabase;// 创建集合db.createCollection("myCollection");```3. 插入数据:```javascriptdb.myCollection.insertOne({name: "John",age: 30});```4. 查询数据:```javascript// 查询所有数据db.myCollection.find();// 查询符合条件的数据db.myCollection.find({ age: 30 });```5. 更新数据:```javascript// 更新一条数据db.myCollection.updateOne({ name: "John" },{ $set: { age: 31 } });// 更新多条数据db.myCollection.updateMany({ age: 30 },{ $set: { age: 31 } });```6. 删除数据:```javascript// 删除一条数据db.myCollection.deleteOne({ name: "John" });// 删除集合db.myCollection.drop();```7. 聚合操作:MongoDB 提供了聚合管道(Aggregation Pipeline)来进行数据聚合和分析。
```javascriptdb.myCollection.aggregate([{$match: { age: 30 }},{$group: {_id: "$name",totalAge: { $sum: "$age" }}}])```这只是 MongoDB 的一些基础操作示例,MongoDB 还提供了更多高级功能和操作,如索引、数据建模、复制集、分片等。
MongoDB操作文档一:MongoDB数据库安装部分1.解压2.设置存放目录3.创建日志文件夹以及数据库路径4.启动数据库1.向数据库中插入数据注:不需要预先创建集合(自动创建)、在文档中可以使用任何结构的数据、每次插入的时候集合中都会有一个ID名字叫_id。
同一集合中,键值名称必须保持唯一。
例:name:mage。
name:zhangsan(会出异常)批量增加数据:插入方式二:注:find() 方法,放回一个游标对象,shell会自动遍历游标,返回一个初始化的set,并允许我们继续用it迭代输出。
2.修改数据库中的数据3.删除数据库中的数据(直接删除关键字所在记录)4.普通查询(1)普通查询(2)JavaScript Shell中的forEach()查询(3)查找指定记录注:在使用游标时,要注意内存溢出,尤其是游标对象很大时,所以推荐使用迭代的方式进行输出。
转换成真实数组的类型进行直接输出(4)条件查询Select * from things where name = “mongo”返回游标里的第一条数据:通过limit限制结果集数量三、MongoDB高级查询部分1.< > <= >= 等四个比较运算符的操作($gt,$lt,$gte,$lte)3.$all类似于SQL中的in(必须满足括弧中的所有值)4.$exists盘算字段是否存在查询所有不存在name字段的记录5.Null的处理查询所有age字段为空的记录6.$mod取模运算7.$ne 不等于X的值不等于38.$in和$nin 包含X范围在2,4,6中的记录9.正则表达式匹配查找所有名字不以B开头的名字10.JavaScript查询和$where 查询11.Count查询记录条数限制之后的条数12.Skip限制放回记录的起点返回从第10条记录开始的5条记录13.Sort排序(以年龄升序、降序)14.游标处理第一种:第二种:精品文档四、MapReduceMongoDB中的MapReduce相当于MySOl中的group by注:使用MapReduce要实现Map函数和Reduce函数,Map函数调用emit(key,value),遍历collection中的所有记录,将key与value传递给Reduce函数进行处理。
Mongodb数据库学习文档一.Mongodb的基本概念1.Mongodb数据库的命名规则:不能是空字符串(“”)不得含有‘’(空格)、.、$、/、\、和\0(空字符)应全部小写最多64字节2.Mongodb数据库的安装和启动在windows上安装与启动:第一步.先下载适用windows的最新mongodb版本的稳定产品。
第二步.把压缩文件解压到自己指定的文件夹(或D:\),为了方便,将解压后的文件夹重命名为mongodb,然后在D盘根文件夹下建一个mongo文件夹。
第三步.启动mongodb服务器,执行如下操作打开命令提示符窗口 (启动 > 运行 >,输入 cmd 并按确定),C:\Documents and Settings\Administrator>d:(指向D盘)D:\>cd mongod(指向D盘下的mongodb文件夹)D:\mongodb>cd bin(指向mongodb文件夹下的bin文件夹)D:\mongodb\bin>mongod -dbpath d://mongo(指定数据库的存放文件夹)然后出现:Wed Oct 19 09:38:16 MongoDB starting : pid=1064 port=27017 dbpath=d://mongo 32-bit** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data** see /post/137788967/32-bit-limitationsWed Oct 19 09:38:16 db version v1.6.5, pdfile version 4.5Wed Oct 19 09:38:16 git version: 0eb017e9b2828155a67c5612183337b89e12e291 Wed Oct 19 09:38:16 sys info: windows (5, 1, 2600, 2, 'Service Pack 3') BOOST_LIB_VERSION=1_35Wed Oct 19 09:38:16 [initandlisten] waiting for connections on port 27017 Wed Oct 19 09:38:16 [websvr] web admin interface listening on port 28017 Wed Oct 19 09:39:45 [initandlisten] connection accepted from 127.0.0.1:6819 #1至此Mongodb服务器启动成功。
(注:启动mongodb服务器以后,切不可关闭dos窗口,否则服务器会自动关闭) 第四步.启动shell。
重新打开一个dos窗口,输入C:\Documents and Settings\Administrator>d:D:\>cd mongodbD:\mongodb>cd binD:\mongodb\bin>mongo另一种方法是,在 Windows 资源管理器中导航至 C:\mongo\bin 并双击mongo.exe。
无论选择哪种方法来启动 shell都会出现MongoDB shell version: 1.6.5connecting to: test>现在已经连接到测试服务器。
2.MongoDB在Linux下的安装配置1.对于32位的linux$ curl /linux/mongodb-linux-i686-1.4.4.tgz >mongo.tgz$ tar xzf mongo.tgz对于64位的linux$ curl /linux/mongodb-linux-x86_64-1.4.4.tgz >mongo.tgz$ tar xzf mongo.tgz 如果没有安装curl 先安装apt-get install curl2.创建数据文件夹默认情况下,MongoDB会在/data/db/这个文件夹存放数据,这个文件夹需要自己手动创建。
通过如下方式创建:$ addusermongodb $ passwd mongodb $ sudo mkdir -p /data/db/ $ sudo chown `id -u`/data/db $ chown -R mongodb:mongodb /data 当然可以通过--dbpath命令指定MongoDB将数据存储到另外的目录中去。
3.让数据库运行起来在控制台中:$ nohup ./mongodb-xxxxxxx/bin/mongod& $ ./mongodb-xxxxxxx/bin/mongo > db.foo.save( { a : 1 } ) > db.foo .find()结果是:{ "_id" : ObjectId("4cd181a31415ffb41a094f43"), "a" : 1 } OK!!二.Mongodb指令及相关操作a) show命令ii.在dos中输入show db 查看当前所有的数据库> show dbsadminalphabetcolorcolorslocalmymongotest>iii.show collections 查看当前数据库下所有的表> use mymongoswitched to db mymongo> show collectionscolorsshell.colorssystem.indexes>b)use命令i.指定当前所需要使用的数据库,如果没有,新建一个库。
如果这个库没有数据,则系统在一段时间后将销毁e [databaseName]c)insert指令i.添加数据,数据形式为json格式ii.如果insert添加的数据中没有表,则会新建一张表并且在将数据添加入表中iii.db.[表名].insert()> db.dingdan.insert(... {... order_id: 109384,... order_date: new Date("12/04/2010"),... customer: {... name: "Joe Bloggs",... company: "XYZ Inc.",... phone: "(555) 123-4567"... },... payment: {... type: "Cash",... amount: 4075.99,... paid_in_full: true... },... items: [... {... sku: "ABC1200",... description: "A sample product",... quantity: 1,... price_per_unit: 75.99,... }, {... sku: "XYZ3400",... description: "An expensive product",... quantity: 2,... price_per_unit: 2000... }... ],... cashier_id: 340582242... }... )>d)save 指令i.保存数据ii.如果表中无此数据则将数据添加入表中iii.如果表中存在此数据,则将新的数据修改iv.db.[表名].save()db.collection.save( x )x就是要更新的对象,只能是单条记录。
如果在collection内已经存在一个和x对象相同的"_id"的记录。
mongodb就会把x对象替换collection内已经存在的记录,否则将会插入x对象,如果x内没有_id,系统会自动生成一个再插入。
相当于上面update语句的upsert=true,multi=false的情况。
db.test0.save({count:40,test1:"OK"}); _id系统会生成db.test0.save({_id:40,count:40,test1:"OK"}); 如果test0内有_id等于40的,会替换,否则插入。
e)remove指令i.删除表中所指定的一条数据ii.db.[表名].remove()在colors表中添加一条记录> db.colors.save({"color":"112233"})> db.colors.find(){ "_id" : ObjectId("4e9bc2024fadb58af17b2f01"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2374fadb58af17b2f02"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2384fadb58af17b2f03"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2394fadb58af17b2f04"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2394fadb58af17b2f05"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f06"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f07"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f08"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f09"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0a"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0b"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23d4fadb58af17b2f0c"), "color" : "ff0000" }{ "_id" : ObjectId("4e9e3f435240000000005a2d"), "color" : "112233" }删除添加的那条记录> db.colors.remove({"color":"112233"})> db.colors.find(){ "_id" : ObjectId("4e9bc2024fadb58af17b2f01"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2374fadb58af17b2f02"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2384fadb58af17b2f03"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2394fadb58af17b2f04"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc2394fadb58af17b2f05"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f06"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f07"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f08"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f09"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0a"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0b"), "color" : "ff0000" }{ "_id" : ObjectId("4e9bc23d4fadb58af17b2f0c"), "color" : "ff0000" }f)update指令i.修改数据ii.db.[表名].update()db.collection.update( criteria, objNew, upsert, multi )criteria : update的查询条件,类似sql update查询内where后面的objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true 为插入,默认是false,不插入。