2012-06-25 14 views
7

Este es el formato de mi documento: Cómo incrementar los campos de objeto de documento MongoDB dentro de una matriz

{ 
    _id: some id, 
    name: 'some name', 
    versions: [] 
} 

En el campo versions almaceno objetos como {v: '2.5', count: 5} donde count contiene el número de veces que una versión está en usa .

¿Cuál es la forma más sencilla de hacer lo siguiente?

  1. insertar un nuevo objeto dentro de la matriz versions si no existe
  2. Ff existe una versión en particular dentro de la matriz versions luego incrementar su count

Respuesta

10

más simple manera bienestar debe ser,

db.collection.update({versions.v:'some_version'},{"$inc":{"versions.$.count":1}}); 

Esto aumentará su recuento si ion existe, pero como dice la documentación de MongoDB, el operador $ no se puede mezclar con la inserción, por lo que la consulta anterior no dará como resultado la inserción si {versions.v:'some_version'} falla.

El operador de posición no se puede combinar con una inserción ya que requiere un elemento de matriz coincidente. Si su actualización da como resultado una inserción , entonces el "$" se usará literalmente como el nombre del campo.

A continuación se presentan las entradas de JIRA para apoyar la inserción con $. Puedes votar y mirar estos problemas.

Upsert with $-positional operator can create bad documents

Support $ positional operator with an upsert

Cuestiones relacionadas