当前位置:首页 > php > PHP7下MongoDB自增或自减一个字段的值

PHP7下MongoDB自增或自减一个字段的值

原创 2021-03-16 php 208
分享给朋友:

需求场景:

`test` 表中的 `id` = 1 数据 `num` 字段 自增+1或者-1

MySQL下:

UPDATE `test`  SET `num` = `num` + 1  WHERE  `id` = 1
UPDATE `test`  SET `num` = `num` - 1  WHERE  `id` = 1

MongoDB下:

 // 增
 db.test.findAndModify(
      {
         query:{ "id" : 1 },
         update: { $inc:{ "num":1 } },
         "new":true
      });
      
 // 减
  db.test.findAndModify(
      {
         query:{ "id" : 1 },
         update: { $inc:{ "num": -1 } },
         "new":true
      });

这里介绍下MongoDB的findAndModify方法

findAndModify属于原子操作模型数据

所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

MongoDB findAndModify方法的语法如下。

db.collection.findAndModify({

    query: <document>,

    sort: <document>,

    new: <boolean>,

    fields: <document>,

    upsert: <boolean>

})

参数说明如下:

query: Defines the selection criteria as to which record needs modification.

query :定义关于哪些记录需要修改的选择标准。

sort: Determines which document should be modified when the selection criteria retrieves multiple documents.

sort :确定选择标准检索多个文档时应修改的文档。

new: indicates that the modified document will be displayed.

new :表示将显示修改后的文档。

fields: specifies the set of fields to be returned.

fields :指定要返回的字段集。

upsert: creates a new document if the selection criteria fails to retrieve a document.

upsert :如果选择标准无法检索文档,则创建一个新文档。

PHP7语法如下:

$param   = [
    'findAndModify' => "test",
    'query'         => ["id" => 1],
    'update'        => ['$inc' => ["num" => 1]],
    'new'           => true,
];
$command = new \MongoDB\Driver\Command($param);
$result  = (new \MongoDB\Driver\Manager("mongodb://localhost:27017", []))->executeCommand("test", $command);
$res     = $result->toArray();
$value   = (array)$res[0];
var_dump($value['value'] ?? NULL);


声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用 BY-NC-SA 协议进行授权

转载:转载请注明原文链接,违者必究 - :https://www.wolfcode.net/info/223/

分享给朋友:

相关文章

在PHP7+下监控Memcached服务、性能、扇区等信息

PHPMemcachedAdmin:一款网页可视化的Memcached工具

Swoole的PHP协程开发框架 imi 集成ThinkPHP模板引擎 think-template

在 imi 框架根目录中执行composer&nbsp;require&nbsp;topthink/think-template安装好模板引擎后,找到路径\vendor\topthink\think-template\src\Template.php找到 fetch() 渲染模板文件的方法,将最后一

PHP的面向对象解析

早期编程由于受电脑硬件限制,程序都是追求效率,而忽略可理解性,扩充性,随着硬件技术的发展,编程越来越重视多人开发,程序员越来越重视程序的可靠性,可扩展性,可维护性,所以刺激了程序语言的发展

ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

PHP常驻内存的多进程任务管理器Composer包。以进程管理为出发点,同时也支持为每个进程设置定时执行功能,您可以用它来完成需要重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理计划任务。

PHP8新特性盘点

PHP 8.0.0 已经正式发布了,这个对于PHPer无疑是一个令人振奋的消息。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match表达式、nullsafe运算符、JIT,并改进了类型系统、错误处理、语法一致性。

PHP8新特性系列:构造器属性提升使用及注意事项

本篇主要说下PHP8构造器属性提升的用法,这个特性对于一些需要在构造器中设置或初始化一些类属性的时候非常有用(包括public、protected和private),比如在PHP7中你可以这样定义一个类的属性,然后在构造方法中传值。class&nbsp;Point&nbsp;{ &nbsp;&nb

ThinkPHP6.0在PHP8下报错解决方法

PHP8下全新安装ThinkPHP6.0.X出现报错,如下Deprecated:&nbsp;Method&nbsp;ReflectionParameter::getClass()&nbsp;is&nbsp;deprecated&nbsp;in&nbsp;xxxx\vendor\topthink\fr

MongoDB驱动聚合查询aggregate在分组分页排序后出现的数据混乱问题

最近在获取MongoDB数据时需要把重复的数据分组来排序,语言版本:PHP7

PHP依赖管理工具composer 2.0正式发布

composer 2.0 现在已更新!性能改进说明(英文)https://blog.packagist.com/composer-2-0-is-now-available/1.有什么新功能?对于命令行(CLI)用户新的平台检查功能检查运行时 PHP 版本和可用扩展,以确保它们与项目依赖项匹配。

2020年度最受欢迎中国开源软件评选【投Thinkphp一票否】

评选活动分为「最佳人气项目」、「优秀 Gitee 组织」及「最积极运营项目」等子类,本页面用于投票选出「最佳人气项目」;