首页 > 数据库 >无涯教程-MongoDB - 原子操作

无涯教程-MongoDB - 原子操作

时间:2023-11-04 16:32:38浏览次数:55  
标签:available product MongoDB 教程 无涯 文档 原子 bought

MongoDB不支持多文档原子事务,但是,它在单个文档上提供了原子操作,因此,如果文档具有一百个字段,那么update语句将不更新所有字段,或者不更新任何字段,从而在文档级别上保持原子性。

原子操作的模型数据

保持原子性的推荐方法是保留所有相关信息,这些信息经常使用嵌入式文档一起更新在单个文档中,这样可以确保单个文档的所有更新都是原子的。

考虑以下产品Product文档-

{
   "_id":1,
   "product_name": "Samsung S3",
   "category": "mobiles",
   "product_total": 5,
   "product_available": 3,
   "product_bought_by": [
      {
         "customer": "john",
         "date": "7-Jan-2014"
      },
      {
         "customer": "mark",
         "date": "8-Jan-2014"
      }
   ]
}

在本文档中,无涯教程将购买产品的客户的信息嵌入到 product_bought_by 字段中。现在,每当有新客户购买该产品时,无涯教程都会首先通过 product_available 字段检查该产品是否仍然可用。如果可用,将减少product_available字段的值,并将新客户的嵌入式文档插入product_bought_by字段。将为此功能使用 findAndModify 命令,因为它可以同时搜索和更新文档。

>db.products.findAndModify({ 
   query:{_id:2,product_available:{$gt:0}}, 
   update:{ 
      $inc:{product_available:-1}, 
      $push:{product_bought_by:{customer:"rob",date:"9-Jan-2014"}} 
   }    
})

无涯教程的嵌入式文档和使用findAndModify查询的方法可确保仅在产品可用时才更新产品购买信息。整个事务都在同一查询中,是原子的。

参考链接

https://www.learnfk.com/mongodb/mongodb-atomic-operations.html

标签:available,product,MongoDB,教程,无涯,文档,原子,bought
From: https://blog.51cto.com/u_14033984/8183795

相关文章

  • 无涯教程-MongoDB - 覆盖查询
    在本章中,无涯教程将学习涵盖的查询。Covered查询根据官方的MongoDB文档,涵盖的查询是以下查询-查询中的所有字段都是索引的一部分。查询中返回的所有字段都在同一索引中。由于查询中存在的所有字段都是索引的一部分,因此MongoDB会匹配查询条件,并使用相同的索引返回输出,而无需......
  • Linux 下使用串口的简易教程
    1、检查串口的配置。查看串口的波特率、数据位、校验位等可以使用以下命令: $stty-F/dev/ttyS02、修改串口的配置。使用stty命令可以修改串口的波特率、数据位、校验位等选项,例如,将串口波特率修改为115200,按如下方式操作:$stty-F/dev/ttyS01152003、stty命令功......
  • Mysql 8.0 下载及安装教程
    软件介绍:MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。 安装和使用教程:1.通过文章末尾处......
  • 无涯教程-MongoDB - 数据库引用
    如MongoDB关系的最后一章所示,为了在MongoDB中实现规范化的数据库结构,无涯教程使用了引用关系的概念,也称为ManualReferences,其中无涯教程手动将参考文件的ID存储在其他文件中。但是,如果文档包含来自不同集合的引用,则可以使用MongoDBDBRefs。使用DBRefDBRefs中有三个字段-......
  • 无涯教程-MongoDB - PHP
    要将MongoDB与PHP一起使用,您需要使用MongoDBPHP驱动程序,从URL下载PHP驱动程序,确保下载最新版本,现在解压缩并将php_mongo.dll放入您的PHP扩展目录(默认为"ext"),并将以下行添加到php.ini文件中-extension=php_mongo.dll连接数据库要创建连接,您需要指定数据库名称,如果数据库不......
  • 无涯教程-MongoDB - 复制数据
    复制是跨多个服务器同步数据的过程,复制提供了冗余,并通过不同数据库服务器上的多个数据副本提高了数据可用性,复制可防止数据库丢失单个服务器。复制还允许您从硬件故障和服务中断中恢复,使用其他数据副本,您可以将其专用于灾难恢复,报告或备份。复制工作方式MongoDB通过使用副本集......
  • 无涯教程-MongoDB - Java
    在本章中,无涯教程将学习如何设置MongoDBJDBC驱动程序。安装驱动在Java程序中开始使用MongoDB之前,需要确保在计算机上设置了MongoDBJDBC驱动程序和Java,您可以检查Java教程以在计算机上安装Java。现在,让无涯教程检查如何设置MongoDBJDBC驱动程序。您需要从路径下载 jarmong......
  • Proxifier 2023年11月时最新版 激活教程
    前言Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持64位系统支持Xp,Vista,Win7,支持socks4,socks5,http代理协议,支持TCPUDP协议,可以指定端口,IP,指定程序等运行模式,兼容性非常好。有许多网络应用程序不支持......
  • 无涯教程-MongoDB - 投影语句
    在MongoDB中,投影(Projection)意味着仅选择必要的数据,而不是选择全部数据,如果文档有5个字段,而只需要显示3个字段,则从中选择3个字段。find()方法MongoDB的find()方法在MongoDB查询文档中进行了解释,该方法接受第二个可选参数是您要检索的字段列表,在MongoDB中,执行find()方法时......
  • 无涯教程-MongoDB - 限制查询
    在本章中,无涯教程将学习如何使用MongoDB限制记录。要限制MongoDB中的记录,您需要使用limit()方法,该方法接受一个数字类型参数,该参数是您要显示的文档数。Limiting-语法limit()方法的基本语法如下->db.COLLECTION_NAME.find().limit(NUMBER)Limiting-示例考虑收集myyco......