mongodb-user
[Arriba] [Todas las Listas]

Re: [mongodb-Usuario] Re: pymongo cambia static el dato pasó dentro par

To: "mongodb-user@xxxxxxxxxxxxxxxx" <mongodb-user@xxxxxxxxxxxxxxxx>
Subject: Re: [mongodb-Usuario] Re: pymongo cambia static el dato pasó dentro para ser insertado
From: Bernie Hackett <bernie@xxxxxxxxxxx>
Date: Thu, 24 Sep 2015 08:17:27 -0700
Delivery-date: Thu, 24 Sep 2015 11:29:19 -0400
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe; bh=zsnR5Yj9NrJD4dL5Ioy+rqryviFqd+uEBoIBYSrhAmU=; b=hfABL9MW4AI/3Y4x0Mhxworqlo1XFreYEhCuyxL2SjWUrAAGodKa/VJKuICAcRDqg/ lH2AK2cf2ob6bV4/3k4A8q40H4U09LxfUogBA+jqE2KWUrsqEaQhmTWgm2b4jv3PHiOc tkQLRGiK/+DQAjm0PtebPxRoezsB5iCHmGrfwzvCUl7XcEpHCzC98a8SjjdHkilOgeZE nbx/NHqTrJXkAixwhDY/gCET7E/dXwKijoA8y5gytlZhZXMxonvBgdVhy6gQfZCJw1Q0 KNCP9XYakNINZB9ByMk2R8BBGrW37XBkwQwvQHOJEZ8pfFUdcWhFoyib9guxxijNQucS CIsA==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mongodb.com; s=google; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe; bh=zsnR5Yj9NrJD4dL5Ioy+rqryviFqd+uEBoIBYSrhAmU=; b=e8cq9J97HrD6v4/j7vdv/MX8939Vfro9dYrgPzehdtk4btWATlI78V9tLyZKmNSvt3 ckN4muroxwHB2jDwHCDI/+XFShg5rDeoPsLMxLIQ+J8oIhu1GazGGzFK/3ODRjyf30OC rxstZa0AtwBWh5j0eislqDOR2mXk0GL1mqxwA=
Envelope-to: traductor@xxxxxxxxxxx
In-reply-to: <f2e374eb-2c97-4eb2-ba4e-c70ae9f71273@googlegroups.com>
List-archive: <http://groups.google.com/group/mongodb-use>
List-help: <http://groups.google.com/support/>, <mailto:mongodb-user+help@googlegroups.com>
List-id: <mongodb-user.googlegroups.com>
List-post: <http://groups.google.com/group/mongodb-user/post>, <mailto:mongodb-user@googlegroups.com>
List-subscribe: <http://groups.google.com/group/mongodb-user/subscribe>, <mailto:mongodb-user+subscribe@googlegroups.com>
List-unsubscribe: <mailto:googlegroups-manage+1044811755470+unsubscribe@googlegroups.com>, <http://groups.google.com/group/mongodb-user/subscribe>
Mailing-list: list mongodb-user@xxxxxxxxxxxxxxxx; contact mongodb-user+owners@xxxxxxxxxxxxxxxx
References: <2da0a643-221f-45f3-8e91-a16b1ce55acb@googlegroups.com> <99da4a3e-b934-45cc-a9da-39d54be46355@googlegroups.com> <f2e374eb-2c97-4eb2-ba4e-c70ae9f71273@googlegroups.com>
Reply-to: mongodb-user@xxxxxxxxxxxxxxxx
Sender: mongodb-user@xxxxxxxxxxxxxxxx
> ...El dato que paso dentro tendría que ser *immuatable dato.

Pero no es. Cualquiera el conductor o el *server  *mutate el dato para añadir
un _*id campo. Si quieres controlar aquella mutación tú puedes, pero
cualquier documento insertado al *server será *mutated para añadir un _*id campo
si uno no existe.

hay también una ventaja a este diseño. Desde el documento es modificado
en insertar, si el insertar falla debido a un asunto de red breve o replicación
*failover puedes *retry el insertar intento. Si no consigues ningún error, entonces el
intento original fallado y el segundo intento tuvo éxito. Si el segundo
intento falla con *DuplicateKeyError, entonces sabes el intento original
tuvo éxito.

A toda costa, este *behavior tiene existir tan mucho tiempo como *PyMongo ha existido. Para
cambiarlo ahora rompería las expectativas de todo existiendo aplicaciones.

En *Thu, *Sep 24, 2015 en 8:01 AM, *rhea *ghosh <rhea.ghosh@xxxxxxxxx> escribió:

> Aquello todavía  no realmente sentido de marca. No quiero controlar el valor del
> _*id campo pero el dato que paso dentro tendría que ser *immuatable dato.
> Regresando el *ObjectID del *MongoDB *server es lo que de hecho esperaría para algo así. Espero el conductor para insertar/actualiza no para
> modificar la estructura de dato.
>
> En jueves, septiembre 24, 2015 en 9:04:40 SOY *UTC-5, *Bernie *Hackett escribió:
>>
>> Sí, *PyMongo, como todo otro *MongoDB conductores, añade un _*id campo a vuestros
>> documentos si no proporcionas uno tú. Si el conductor no lo añadió
>> entonces el *server  en cambio. Cada *MongoDB el documento es requerido para tener
>> un _*id valor. *PyMongo Siempre ha modificado el documento pasado para insertar
>> *helpers para añadir este campo y siempre . Para cambiar que *behavior rompería las expectativas de cada existiendo aplicación.
>>
>> Si quieres controlar el valor del _*id campo para mantener vuestros documentos
>> "*static" te lata. *PyMongo Sólo modificado el documento del _*id el campo 
>> no ya existe.
>>
>> En miércoles, septiembre 23, 2015 en 12:23:25 PM *UTC-7, *rhea *ghosh escribió:
>>>
>>> *Hi,
>>>
>>> Así que estoy manteniendo el *MongoDB *returner para *Saltstack y encontré que
>>> en *pymongo hay inesperado *behavior
>>>
>>> tengo esta función que es muy sencillo que estoy utilizando para salvar mi carga
>>> al *database. Aun así, he tuvo que añadir .Copia() porque a insertar
>>> *Mongo *appends el _*id a mi valor de carga. Esto es inesperado *behavior y cuestiono por qué *Mongo está cambiando algo que tendría que ser *static dato.
>>>
>>>
>>> *def Salva_carga(*jid, carga):
>>>     '''
>>>     Salvar la carga para un trabajo dado *id
>>>     '''
>>>     *conn, *mdb = _consigue_*conn(*ret=Ninguno)
>>>     si *float(versión) > 2.3:
>>>         trabajo = *mdb.Trabajos.Inserta_un(carga.Copia())
>>>     más:
>>>         *mdb.Trabajos.Inserta(carga)
>>>
>>> --
> recibiste este mensaje porque eres *subscribed al *Google Grupos
> "*mongodb-grupo"
> de usuario.
>
> Para otro *MongoDB opciones de apoyo técnico, ve:
> *http://www.mongodb.org/sobre/apoyo/.
> ---
> Recibiste este mensaje porque eres *subscribed a un tema en
> el *Google Grupos "*mongodb-grupo" de usuario.
> A *unsubscribe de este tema, visita
> *https://grupos.*google.*com/*d/Tema/*mongodb-usuario/*tx_*cRuHXHK8/*unsubscribe.
> A *unsubscribe de este grupo y todos sus temas, enviar un *email a *mongodb-usuario+unsubscribe@xxxxxxxxxxxxxxxx.
> 
> A correo a este grupo, envía *email a *mongodb-user@xxxxxxxxxxxxxxxx.
> Visita este grupo en *http://grupos.*google.*com/Grupo/*mongodb-usuario.
> Para ver esta discusión en la visita de web
> *https://grupos.*google.*com/*d/*msgid/*mongodb-Usuario/*f2*e374*eb-2*c97-4*eb2-*ba4*e-*c70*ae9*f71273%40*googlegroups.*com
> <*https://Grupos.*google.*com/*d/*msgid/*mongodb-Usuario/*f2*e374*eb-2*c97-4*eb2-*ba4*e-*c70*ae9*f71273%40*googlegroups.*com?*utm_Medio=*email&*utm_fuente=*footer>
> .
>
> Para más opciones, visita *https://grupos.*google.*com/*d/*optout.
>

-- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*mongodb-grupo"
de usuario.

Para otro *MongoDB opciones de apoyo técnico, ve: *http://www.mongodb.org/sobre/apoyo/.
--- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*mongodb-grupo" de usuario.
A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un *email a *mongodb-usuario+unsubscribe@xxxxxxxxxxxxxxxx.
A correo a este grupo, envía *email a *mongodb-user@xxxxxxxxxxxxxxxx.
Visita este grupo en *http://grupos.*google.*com/Grupo/*mongodb-usuario.
Para ver esta discusión en la visita de web *https://grupos.*google.*com/*d/*msgid/*mongodb-Usuario/*CAFqwGEzhmNSXKE-*u4*rskT8*ByZsuHrtJWfLLBADek9*m9*oG4*h12Un%40correo.*gmail.*com.
Para más opciones, visita *https://grupos.*google.*com/*d/*optout.
> ...the data that I pass in should be immuatable data.

But it's not. Either the driver or the server will mutate the data to add
an _id field. If you want to control that mutation yourself you can, but
any document inserted into the server will be mutated to add an _id field
if one does not exist.

There is also an advantage to this design. Since the document is modified
on insert, if the insert fails due to a brief network issue or replication
failover you can retry the insert attempt. If you get no error, then the
original attempt failed and the second attempt succeeded. If the second
attempt fails with DuplicateKeyError, then you know the original attempt
succeeded.

Regardless, this behavior has existing as long as PyMongo has existed. To
change it now would break the expectations of all existing applications.

On Thu, Sep 24, 2015 at 8:01 AM, rhea ghosh <rhea.ghosh@xxxxxxxxx> wrote:

> That still doesn't really make sense. I don't want to control the value of
> the _id field but the data that I pass in should be immuatable data.
> Returning the ObjectID from the MongoDB server is what I would actually
> expect for something like this. I expect the driver to insert/update not to
> modify the data structure.
>
> On Thursday, September 24, 2015 at 9:04:40 AM UTC-5, Bernie Hackett wrote:
>>
>> Yes, PyMongo, like all other MongoDB drivers, adds an _id field to your
>> documents if you don't provide one yourself. If the driver didn't add it
>> then the server would instead. Every MongoDB document is required to have
>> an _id value. PyMongo has always modified the document passed to insert
>> helpers to add this field and always will. To change that behavior would
>> break the expectations of every existing application.
>>
>> If you want to control the value of the _id field to keep your documents
>> "static" you can. PyMongo only modified the document of the _id field does
>> not already exist.
>>
>> On Wednesday, September 23, 2015 at 12:23:25 PM UTC-7, rhea ghosh wrote:
>>>
>>> Hi,
>>>
>>> So I'm maintaining the MongoDB returner for Saltstack and I found that
>>> in pymongo there's unexpected behavior
>>>
>>> I have this function which is very simple that I'm using to save my load
>>> to the database. However, I've had to add .copy() because upon insert
>>> Mongo appends the _id into my load value. This is unexpected behavior and I
>>> question why Mongo is changing something that should be static data.
>>>
>>>
>>> def save_load(jid, load):
>>>     '''
>>>     Save the load for a given job id
>>>     '''
>>>     conn, mdb = _get_conn(ret=None)
>>>     if float(version) > 2.3:
>>>         job = mdb.jobs.insert_one(load.copy())
>>>     else:
>>>         mdb.jobs.insert(load)
>>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "mongodb-user"
> group.
>
> For other MongoDB technical support options, see:
> http://www.mongodb.org/about/support/.
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "mongodb-user" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/mongodb-user/tx_cRuHXHK8/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
> To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
> Visit this group at http://groups.google.com/group/mongodb-user.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/mongodb-user/f2e374eb-2c97-4eb2-ba4e-c70ae9f71273%40googlegroups.com
> <https://groups.google.com/d/msgid/mongodb-user/f2e374eb-2c97-4eb2-ba4e-c70ae9f71273%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: http://www.mongodb.org/about/support/.
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at http://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/CAFqwGEzhmNSXKE-u4rskT8ByZsuHrtJWfLLBADek9m9oG4h12A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
<Anterior por Tema] Tema Actual [Siguiente por Tema>