{"id":2704,"date":"2020-04-16T09:01:00","date_gmt":"2020-04-16T09:01:00","guid":{"rendered":"https:\/\/hoplasoftware.com\/?p=2704"},"modified":"2025-10-30T23:25:31","modified_gmt":"2025-10-30T22:25:31","slug":"for-update-en-las-transacciones-de-mongodb","status":"publish","type":"post","link":"https:\/\/hopla.tech\/en\/for-update-en-las-transacciones-de-mongodb\/","title":{"rendered":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB"},"content":{"rendered":"<h3 class=\"wp-block-heading\">Transacciones ACID Multi-Document en Mongo 4.0&nbsp;<\/h3>\n\n\n\n<p>\u00bfC\u00f3mo puedo estar seguro de que los documentos que estoy leyendo dentro de una transacci\u00f3n no se modificar\u00e1n en otra antes de que se ejecuten?&nbsp;<\/p>\n\n\n\n<p>Antes de responder a esta pregunta, debemos saber c\u00f3mo funciona la concurrencia en MongoDB, dentro y fuera de las transacciones.&nbsp;<\/p>\n\n\n\n<!--more Sigue leyendo-->\n\n\n\n<h3 class=\"wp-block-heading\">Locking<\/h3>\n\n\n\n<p><a href=\"https:\/\/hopla.tech\/en\/smart-data\/\">MongoDB <\/a>utiliza bloqueo multi-granularity que permite acceso compartido a un recurso, como a una base de datos o a una colecci\u00f3n.\u00a0<\/p>\n\n\n\n<p>Todas las lecturas y escrituras que forman parte de una transacci\u00f3n deber\u00e1n tener un bloqueo exclusivo (IX) en la colecci\u00f3n a la que est\u00e1n accediendo. A veces, esto no es posible porque otra operaci\u00f3n tiene un bloqueo exclusivo o compartido (X o S) en esa colecci\u00f3n, o en su base de datos. Por tanto, para evitar un posible deadlock la transacci\u00f3n espera 5 ms (o lo que indique el par\u00e1metro maxTransactionLockRequestTimeoutMillis) y se detiene.<\/p>\n\n\n\n<p>Sin embargo, las operaciones que tienen un bloqueo exclusivo o compartido en una colecci\u00f3n no son muy comunes, as\u00ed que a continuaci\u00f3n, vamos a ver qu\u00e9 es lo m\u00e1s probable que puede crear un conflicto en una transacci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conflictos en escritura y transacciones<\/h3>\n\n\n\n<p>En WiredTiger, una actualizaci\u00f3n se escribe en un documento y se detiene si se detecta un conflicto, como ocurrir\u00e1 en otros casos, como cuando se supera el umbral de memoria disponible.<\/p>\n\n\n\n<p>Fuera de las transacciones, dichas escrituras volver\u00e1n a ejecutarse autom\u00e1ticamente dentro de MongoDB hasta que se ejecute con \u00e9xito.<\/p>\n\n\n\n<p>El escenario es un poco diferente en el caso de las transacciones. Mira los siguientes ejemplos:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/hopla.tech\/wp-content\/uploads\/2024\/07\/WriteConflictDiagram2-s6u7qrzfdt-1.webp\" alt=\"\"\/><\/figure>\n\n\n\n<p>En una transacci\u00f3n (t1) se puede dar un writeConflict si otra operaci\u00f3n de escritura modifica el mismo documento (D1) despu\u00e9s de que haya comenzado la transacci\u00f3n y antes de que se intente modificar por s\u00ed misma. Esto puede suceder porque la otra operaci\u00f3n de escritura est\u00e9 o no en una transacci\u00f3n. En la imagen de la izquierda se muestra como una declaraci\u00f3n independiente, y en la imagen de la derecha como una segunda transacci\u00f3n (t2).<\/p>\n\n\n\n<p><strong>A continuaci\u00f3n, se muestra el ejemplo de un error writeConflict visto desde MongoDB:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/hopla.tech\/wp-content\/uploads\/2024\/07\/mongo-foto-1-768x434-1.webp\" alt=\"\"\/><\/figure>\n\n\n\n<p>En el caso de que se genere un writeConflict dentro de una transacci\u00f3n, no se vuelve a intentar autom\u00e1ticamente, pero devolver\u00e1 el error al driver.<\/p>\n\n\n\n<p>Cuando se devuelve un writeConflict, el driver puede volver a intentar de forma segura toda la transacci\u00f3n utilizando el&nbsp;<a style=\"color: #000000;\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/transactions-in-applications\/#drivers-api\" target=\"_blank\" rel=\"noreferrer noopener\">Callback API&nbsp;<\/a>de transacciones que permite volver a intentarlo autom\u00e1ticamente en caso de TransientTransactionError (como en writeConflicts).&nbsp;<\/p>\n\n\n\n<p>Las operaciones de escritura fuera de la transacci\u00f3n se vuelve a intentar autom\u00e1ticamente, cuando sucede un writeConflict en un documento que se haya modificado dentro de una transacci\u00f3n hasta que tenga \u00e9xito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conflictos en operaciones de lectura<\/h3>\n\n\n\n<p>Ahora que sabemos lo que sucede cada vez que realizamos operaciones de escritura dentro de una transacci\u00f3n, podemos centrarnos en lo que sucede cuando realizamos operaciones de lectura.<\/p>\n\n\n\n<p>Cuando se inicia una transacci\u00f3n con un&nbsp;<a style=\"color: #000000;\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/read-concern-snapshot\/\">Read Concern \u201csnapshot\u201d<\/a>, tenemos la garant\u00eda de leer desde un punto consistente en el tiempo a nivel de cl\u00faster. Los datos que estamos leyendo dentro de la transacci\u00f3n no se ven afectados por ninguna operaci\u00f3n de escritura que ocurra fuera de la transacci\u00f3n.<\/p>\n\n\n\n<p>Por ejemplo, cuando la transacci\u00f3n t1 comienza, obtiene un snapshot de los datos, incluido el documento D1 que se pretende leer. Mientras tanto, la transacci\u00f3n t2 tiene su propio snapshot y elimina el documento D1. Sin embargo, la transacci\u00f3n t1 todav\u00eda puede leer el documento D1 porque se refiere a su snapshot y, por lo tanto, est\u00e1 aislada de otras transacciones que hayan realizado cambios.<\/p>\n\n\n\n<p>Esto lo que esto significa, es que no podemos estar seguros de que despu\u00e9s de leer los documentos dentro de una transacci\u00f3n, esos documentos no ser\u00e1n modificados por otra operaci\u00f3n mientras dure nuestra transacci\u00f3n.<\/p>\n\n\n\n<p>En el mundo relacional, esto se resuelve utilizando SELECT\u2026FOR UPDATE Esta declaraci\u00f3n permite bloquear las filas que estamos leyendo como si estuvieran actualizadas, evitando que otras operaciones las modifiquen o eliminen hasta que finalice nuestra transacci\u00f3n.<\/p>\n\n\n\n<p>El mismo comportamiento se puede reproducir en MongoDB modificando un documento para que otras transacciones que intentan escribir en \u00e9l reciban una excepci\u00f3n writeConflict.<\/p>\n\n\n\n<p>\u00bfPero qu\u00e9 es lo que debemos actualizar? No podemos simplemente reescribir el valor de un campo existente con su valor actual porque MongoDB es eficiente y no modificar\u00e1 un documento si una escritura no cambia realmente el valor existente.<\/p>\n\n\n\n<p><strong>Considerando el siguiente ejemplo como un documento de una colecci\u00f3n:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/hopla.tech\/wp-content\/uploads\/2024\/07\/Mongo-foto-2-768x81-1.webp\" alt=\"Mongo status true\"\/><\/figure>\n\n\n\n<p>Desarrollamos una actualizaci\u00f3n dentro de la transacci\u00f3n:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/hopla.tech\/wp-content\/uploads\/2024\/07\/Mongo-foto-3-768x99-1.webp\" alt=\"Sin writeConflict\"\/><\/figure>\n\n\n\n<p>Con esto conseguimos que si nosotros no modificamos el documento (y el status est\u00e1 a true), otras operaciones pueden modificar el documento sin provocar un writeConflict.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Emulando un bloqueo de escritura (Write Lock) durante una lectura<\/h3>\n\n\n\n<p>Para asegurarnos de que evitamos que otras operaciones modifiquen nuestro documento, debemos asegurarnos de que estamos escribiendo un nuevo valor en \u00e9l. Por lo general, no tenemos un campo que podamos cambiar para que suceda una escritura, pero el esquema flexible de MongoDB nos facilita establecer un atributo que vamos a usar exclusivamente para adquirir nuestro \u00abWrite Lock\u00bb.<\/p>\n\n\n\n<p>La siguiente pregunta es \u00bfa qu\u00e9 valor debemos establecer nuestro nuevo atributo? Debe ser un valor que sepamos que ser\u00e1 diferente a cualquier valor que ya est\u00e9 en el campo. Ya tenemos un tipo de datos en MongoDB con esas propiedades: ObjectId. Dado que ObjectId se genera en base a una combinaci\u00f3n de Unix Epoch, valores aleatorios y un contador, es extremadamente improbable que se genere el mismo valor m\u00e1s de una vez. Eso significa que cuando lo actualizamos, se establecer\u00e1 el campo en un valor diferente. Una vez que se realiza la actualizaci\u00f3n, otras operaciones obtendr\u00e1n un writeConflict.<\/p>\n\n\n\n<p><strong>En c\u00f3digo se muestra de la siguiente forma:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/hopla.tech\/wp-content\/uploads\/2024\/07\/Mongo-foto-4-768x98-1.webp\" alt=\"\"\/><\/figure>\n\n\n\n<p>La bueno de este m\u00e9todo es que no se necesita ning\u00fan paso adicional para \u00abdesbloquear\u00bb el documento; suceder\u00e1 autom\u00e1ticamente cuando ejecute o cancele la transacci\u00f3n. El valor del campo de bloqueo, en nuestro ejemplo myLock, puede ser cualquiera. No importa cu\u00e1l sea el valor, siempre que cambie el valor existente. El uso de findOneAndUpdate tambi\u00e9n mantiene el n\u00famero de viajes de ida y vuelta a la base de datos, ya que ambos actualizan el campo de bloqueo en el documento y lo devuelve a la aplicaci\u00f3n.<\/p>\n\n\n\n<p>El valor del campo de bloqueo no necesita ser le\u00eddo por ninguna transacci\u00f3n. Sin embargo, puedes utilizar el campo de bloqueo para almacenar informaci\u00f3n sobre qu\u00e9 aplicaci\u00f3n est\u00e1 bloqueando la cadena.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusi\u00f3n<\/h3>\n\n\n\n<p>La capacidad de bloquear documentos a trav\u00e9s del soporte de transacciones de MongoDB es una poderosa ayuda para garantizar la consistencia. Recuerda que, aunque MongoDB soporta transacciones, todas las mejores pr\u00e1cticas existentes siguen siendo v\u00e1lidas y debes usar las transacciones solo cuando sea necesario. Siempre se debe aprovechar la flexibilidad que proporcionan los documentos en MongoDB que en muchos casos elimina la necesidad de usar transacciones.<\/p>\n\n\n\n<p>Contenido original:&nbsp;<a style=\"color: #808080;\" href=\"https:\/\/www.mongodb.com\/blog\/post\/how-to-select--for-update-inside-mongodb-transactions\">https:\/\/www.mongodb.com\/blog\/post\/how-to-select\u2013for-update-inside-mongodb-transactions<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Transacciones ACID Multi-Document en Mongo 4.0&nbsp; \u00bfC\u00f3mo puedo estar seguro de que los documentos que estoy leyendo dentro de una transacci\u00f3n no se modificar\u00e1n en otra antes de que se ejecuten?&nbsp; Antes de responder a esta pregunta, debemos saber c\u00f3mo funciona la concurrencia en MongoDB, dentro y fuera de las transacciones.&nbsp;<\/p>","protected":false},"author":3,"featured_media":11971,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[285],"tags":[697,695,690,696,692,691,693,694],"class_list":["post-2704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-intelligence-platform","tag-concurrencia-y-locking","tag-findoneandupdate","tag-mongodb","tag-objectid","tag-read-concern-snapshot","tag-transacciones-acid","tag-wiredtiger","tag-writeconflict"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>FOR UPDATE en las transacciones de MongoDB<\/title>\n<meta name=\"description\" content=\"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB Transformaci\u00f3n digital, Soporte Postgres, Open Source Hopla!Software\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hopla.tech\/en\/for-update-en-las-transacciones-de-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB\" \/>\n<meta property=\"og:description\" content=\"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB Transformaci\u00f3n digital, Soporte Postgres, Open Source Hopla!Software\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hopla.tech\/en\/for-update-en-las-transacciones-de-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Hopla! Tech\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-16T09:01:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-30T22:25:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/04\/mongo-grande.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"135\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Hopla!\u00a0Tech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@HoplaSoftware\" \/>\n<meta name=\"twitter:site\" content=\"@HoplaSoftware\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hopla!\u00a0Tech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/\"},\"author\":{\"name\":\"Hopla!\u00a0Tech\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/person\\\/9cf81e385f7a2f68085449a2e16e1d22\"},\"headline\":\"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB\",\"datePublished\":\"2020-04-16T09:01:00+00:00\",\"dateModified\":\"2025-10-30T22:25:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/\"},\"wordCount\":1228,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/mongo-grande.webp\",\"keywords\":[\"concurrencia y locking\",\"findOneAndUpdate\",\"MongoDB\",\"ObjectId\",\"read concern snapshot\",\"transacciones ACID\",\"WiredTiger\",\"writeConflict\"],\"articleSection\":[\"Data Intelligence Platform\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/\",\"url\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/\",\"name\":\"FOR UPDATE en las transacciones de MongoDB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/mongo-grande.webp\",\"datePublished\":\"2020-04-16T09:01:00+00:00\",\"dateModified\":\"2025-10-30T22:25:31+00:00\",\"description\":\"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB Transformaci\u00f3n digital, Soporte Postgres, Open Source Hopla!Software\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/mongo-grande.webp\",\"contentUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/mongo-grande.webp\",\"width\":500,\"height\":135},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/for-update-en-las-transacciones-de-mongodb\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/hopla.tech\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#website\",\"url\":\"https:\\\/\\\/hopla.tech\\\/\",\"name\":\"Hopla! Tech\",\"description\":\"The enterprise software and consultancy company\",\"publisher\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\"},\"alternateName\":\"Hopla!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hopla.tech\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\",\"name\":\"Hopla! Tech\",\"alternateName\":\"Hopla!\",\"url\":\"https:\\\/\\\/hopla.tech\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Hopla-by-BTW-b-3.webp\",\"contentUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Hopla-by-BTW-b-3.webp\",\"width\":274,\"height\":115,\"caption\":\"Hopla! Tech\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/HoplaSoftware\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hopla-software\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@hoplasoftware7485\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/person\\\/9cf81e385f7a2f68085449a2e16e1d22\",\"name\":\"Hopla!\u00a0Tech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"caption\":\"Hopla!\u00a0Tech\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"FOR UPDATE en las transacciones de MongoDB","description":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB Transformaci\u00f3n digital, Soporte Postgres, Open Source Hopla!Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hopla.tech\/en\/for-update-en-las-transacciones-de-mongodb\/","og_locale":"en_GB","og_type":"article","og_title":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB","og_description":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB Transformaci\u00f3n digital, Soporte Postgres, Open Source Hopla!Software","og_url":"https:\/\/hopla.tech\/en\/for-update-en-las-transacciones-de-mongodb\/","og_site_name":"Hopla! Tech","article_published_time":"2020-04-16T09:01:00+00:00","article_modified_time":"2025-10-30T22:25:31+00:00","og_image":[{"width":500,"height":135,"url":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/04\/mongo-grande.webp","type":"image\/webp"}],"author":"Hopla!\u00a0Tech","twitter_card":"summary_large_image","twitter_creator":"@HoplaSoftware","twitter_site":"@HoplaSoftware","twitter_misc":{"Written by":"Hopla!\u00a0Tech","Estimated reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#article","isPartOf":{"@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/"},"author":{"name":"Hopla!\u00a0Tech","@id":"https:\/\/hopla.tech\/#\/schema\/person\/9cf81e385f7a2f68085449a2e16e1d22"},"headline":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB","datePublished":"2020-04-16T09:01:00+00:00","dateModified":"2025-10-30T22:25:31+00:00","mainEntityOfPage":{"@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/"},"wordCount":1228,"commentCount":0,"publisher":{"@id":"https:\/\/hopla.tech\/#organization"},"image":{"@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/04\/mongo-grande.webp","keywords":["concurrencia y locking","findOneAndUpdate","MongoDB","ObjectId","read concern snapshot","transacciones ACID","WiredTiger","writeConflict"],"articleSection":["Data Intelligence Platform"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/","url":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/","name":"FOR UPDATE en las transacciones de MongoDB","isPartOf":{"@id":"https:\/\/hopla.tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/04\/mongo-grande.webp","datePublished":"2020-04-16T09:01:00+00:00","dateModified":"2025-10-30T22:25:31+00:00","description":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB Transformaci\u00f3n digital, Soporte Postgres, Open Source Hopla!Software","breadcrumb":{"@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#primaryimage","url":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/04\/mongo-grande.webp","contentUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/04\/mongo-grande.webp","width":500,"height":135},{"@type":"BreadcrumbList","@id":"https:\/\/hopla.tech\/for-update-en-las-transacciones-de-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/hopla.tech\/"},{"@type":"ListItem","position":2,"name":"SELECT \u2026 FOR UPDATE en las transacciones de MongoDB"}]},{"@type":"WebSite","@id":"https:\/\/hopla.tech\/#website","url":"https:\/\/hopla.tech\/","name":"Hopla! Tech","description":"The enterprise software and consultancy company","publisher":{"@id":"https:\/\/hopla.tech\/#organization"},"alternateName":"Hopla!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hopla.tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/hopla.tech\/#organization","name":"Hopla! Tech","alternateName":"Hopla!","url":"https:\/\/hopla.tech\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/hopla.tech\/#\/schema\/logo\/image\/","url":"https:\/\/hopla.tech\/wp-content\/uploads\/2025\/12\/Hopla-by-BTW-b-3.webp","contentUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2025\/12\/Hopla-by-BTW-b-3.webp","width":274,"height":115,"caption":"Hopla! Tech"},"image":{"@id":"https:\/\/hopla.tech\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/HoplaSoftware","https:\/\/www.linkedin.com\/company\/hopla-software\/","https:\/\/www.youtube.com\/@hoplasoftware7485"]},{"@type":"Person","@id":"https:\/\/hopla.tech\/#\/schema\/person\/9cf81e385f7a2f68085449a2e16e1d22","name":"Hopla!\u00a0Tech","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","caption":"Hopla!\u00a0Tech"}}]}},"_links":{"self":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/2704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/comments?post=2704"}],"version-history":[{"count":3,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/2704\/revisions"}],"predecessor-version":[{"id":12668,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/2704\/revisions\/12668"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/media\/11971"}],"wp:attachment":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/media?parent=2704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/categories?post=2704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/tags?post=2704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}