ThinkPHP Mongo驱动update方法支持upsert参数

Mongo数据库update操作有一个相对于Mysql的关键特性,它可以使用upsert模式,当更新的数据不存在时,直接插入,但是ThinkPHP的Mongo驱动居然不支持这一特性,没办法,自力更生了。

ThinkPHP的driver层,见由于支持多种DB,又使用了继承,使用得类层次结构较深,负责Mongo驱动的是DbMongo.class.php,文件位于ThinkPHP\Extend\Driver\Db,修改Update方法的$options参数,如果update方法提供了upsert选项时,就以upsert模式更新MongoDB。

   1:  public function update($data,$options) {
   2:          if(isset($options[‘table‘])) {
   3:              $this->switchCollection($options[‘table‘]);
   4:          }
   5:          $this->model  =   $options[‘model‘];
   6:          N(‘db_write‘,1);
   7:          $query   = $this->parseWhere($options[‘where‘]);
   8:          $set  =  $this->parseSet($data);
   9:          $isUpsert = $options[‘upsert‘] === true ? true : false;
  10:          if($this->debug) {
  11:              $this->queryStr   =  $this->_dbName.‘.‘.$this->_collectionName.‘.update(‘;
  12:              $this->queryStr   .= $query?json_encode($query):‘{}‘;
  13:              $this->queryStr   .=  ‘,‘.json_encode($set).‘)‘;
  14:          }
  15:          try{
  16:              // 记录开始执行时间
  17:              G(‘queryStartTime‘);
  18:              $result   = $this->_collection->update($query,$set,array("upsert" => $isUpsert, "multiple" => true));
  19:              $this->debug();
  20:              return $result;
  21:          } catch (MongoCursorException $e) {
  22:              throw_exception($e->getMessage());
  23:          }
  24:      }
时间: 2024-12-30 10:43:48

ThinkPHP Mongo驱动update方法支持upsert参数的相关文章

mongodb中update方法的upsert和multi

mongodb中的update的形式是这样的: db.collectionName.update(query, obj, upsert, multi); 对于upsert(默认为false):如果upsert=true,如果query找到了符合条件的行,则修改这些行,如果没有找到,则追加一行符合query和obj的行.如果upsert为false,找不到时,不追加. 对于multi(默认为false): 如果multi=true,则修改所有符合条件的行,否则只修改第一条符合条件的行.

[转]让ASP.NET Web API支持$format参数的方法

本文转自:http://www.cnblogs.com/liuzhendong/p/4228592.html 在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数,只要在WebApiConfig里添加如下三行红色粗体代码即可: using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using System.Net.Http.Format

让ASP.NET Web API支持$format参数的方法

在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数,只要在WebApiConfig里添加如下三行红色粗体代码即可: using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using System.Net.Http.Formatting; namespace ProjectManagementWebAppV4 { public stat

mongo db 使用方法

1 下载 mogodb http://www.mongodb.org/display/DOCS/Downloads 2 打开服务 我安装在e盘下了 可以指定数据文件位置 到 E:\mongoDB\mongodb-win32-i386-1.1.3\bin 目录下的 mongod.exe 是服务文件 可以创建c:\data\db 这个目录 这样的话 数据库的默认数据文件就可以在此目录下 如果没有此文件夹可以自己指定数据文件 命令如下 E:\mongoDB\mongodb-win32-i386-1.1

ThinkPHP 更新数据 save方法

ThinkPHP save() 方法 ThinkPHP 中使用 save() 方法来更新数据库,并且也支持连贯操作的使用. 例子: public function update(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 需要更新的数据 $data['email'] = '[email protected]'; // 更新的条件 $condition['userna

ThinkPHP单字母函数(快捷方法)使用总结

ThinkPHP单字母函数(快捷方法)使用总结 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-07-23 这篇文章主要介绍了ThinkPHP单字母函数(快捷方法)使用总结,对ThinkPHP的快捷方法做了针对性的归纳总结,需要的朋友可以参考下 在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同URL模式 ? 1 U($

jquery ajax 方法及各参数详解

jquery ajax 方法及各参数详解 1.$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息. 参数列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分

《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

感谢唯笑志在分享 原博主原地址:http://www.cnblogs.com/lsjwq/ 注:ServerSuperIO有可能被移植到Windows 10 IOT上,那么将来有可能开发一套设备驱动,可以支行在服务端.嵌入式设备中,将形成完整的解决方案.       现在已经调试通过部分代码,还得需要一段时间,一般都是晚上干,时间也有限.如下图: 目       录 4.如开发一套设备驱动,同时支持串口和网络通讯... 2 4.1           概述... 2 4.2          

thinkphp模版调用函数方法

原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0,3}取标题中前3个字符 {$times|date='Y-m-d H:i:s',###}将times时间戳转换为日期格式 ================================================== 冒号执行函数的用法:输出方法并执行返回值 {:U('user/insert')