Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

409
Vistas
¿Por qué la notación de puntos mongo reemplaza un subdocumento completo?

Tengo el siguiente documento en mi base de datos:

 { "_id": ObjectId("ABCDEFG12345"), "options" : { "foo": "bar", "another": "something" }, "date" : { "created": 1234567890, "updated": 0 } }

Y quiero actualizar options.foo y date.updated al mismo tiempo usando la notación de puntos, así:

 var mongojs = require('mongojs'); var optionName = 'foo'; var optionValue = 'baz'; var updates = {}; updates['options.' + optionName] = optionValue; updates['date.updated'] = new Date().getTime(); db.myCollection.findAndModify({ query : { _id : ObjectId('ABCDEFG12345') }, update : { $set : updates }, upsert : false, new : true }, function(error, doc, result) { console.log(doc.options); console.log(doc.date); });

Y esto da como resultado:

 { foo : 'baz', another : 'something' } { updated : 1234567890 }

Específicamente, mi campo date.created preexistente está siendo golpeado a pesar de que estoy usando la notación de puntos.

¿Por qué esto solo funciona parcialmente? El subdocumento de options conserva sus datos preexistentes ( options.another ), ¿por qué el subdocumento de date no conserva sus datos preexistentes?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El comportamiento descrito generalmente ocurre cuando el objeto pasado en el operador $set tiene la forma { "data" : { "updated" : 1234567890 } } en lugar de { "data.updated" : 1234567890 } , pero no estoy familiarizado con puntos en JavaScript suficientes para saber si esa podría ser la causa del lado de JS.

Además, no explicaría por qué sucede con data y no con las options .

Si pudiera imprimir el objeto almacenado en las updates de variables y que se envía a MongoDB en el campo de update , eso permitiría saber de qué lado está el problema (JS o MongoDB).

over 4 years ago · Santiago Trujillo Denunciar

0

Paso su código a un entorno de prueba y uso la misma biblioteca que está usando. La biblioteca mongojs, para consultas por ObjectId nativo es así mongojs.ObjectId("####") Puede consultar la documentación oficial .

para la función de devolución de llamada en la función findAndModify, el parámetro docs es una matriz, así que navego como una matriz ingrese la descripción de la imagen aquí

Nota: [para concatenar la cadena, uso literales de plantilla] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals )

Todo funciona bien...

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda