MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB - Ajout à un ensemble et incrémentation

Si vous souhaitez passer d'une liste à un hachage (objet), vous pouvez le faire de manière atomique.

À partir de la documentation :"$inc ... incrémente le champ de la valeur numérique si le champ est présent dans l'objet, sinon définit le champ sur la valeur numérique."

{ $inc : { field : value } }

Donc, si vous pouviez refactoriser votre conteneur et votre objet :

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

à :

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

vous pouvez utiliser l'opération update avec :

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

qui créerait { 'foo': 1 } si 'foo' n'existe pas, sinon incrémenter foo.

Ex. :

$ 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   }   }
]