sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB - Agregar a un conjunto e incrementar

Si está dispuesto a cambiar de una lista a hash (objeto), puede hacerlo atómicamente.

De los docs :"$inc ... incrementa el campo por el valor numérico si el campo está presente en el objeto; de lo contrario, establece el campo en el valor numérico".

{ $inc : { field : value } }

Entonces, si pudiera refactorizar su contenedor y objeto:

words: [
  {
    'word': 'foo',
    'count': 1
  },
  ...
]

a:

words: {
  'foo': 1,
  'other_word: 2,
  ...
}

podrías usar la operación update con:

{ $inc: { 'words.foo': 1 } }

que crearía { 'foo': 1 } si 'foo' no existe, incrementa foo.

Por ejemplo:

$ db.bar.insert({ id: 1, words: {} });
$ db.bar.find({ id: 1 })
[ 
  {   ...,   "words" : {     },   "id" : 1   }
]
$ db.bar.update({ id: 1 }, { $inc: { 'words.foo': 1 } });
$ db.bar.find({ id: 1 })
[ 
  {   ...,   "id" : 1,   "words" : {   "foo" : 1   }   }
]
$ db.bar.update({ id: 1 }, { $inc: { 'words.foo': 1 } });
$ db.bar.find({ id: 1 })
[ 
  {   ...,   "id" : 1,   "words" : {   "foo" : 2   }   }
]