MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB - Aggiunta a un set e incremento

Se sei disposto a passare da un elenco all'hash (oggetto), puoi farlo in modo atomico.

Dai documenti :"$inc ... incrementa il campo del valore numerico se il campo è presente nell'oggetto, altrimenti imposta il campo sul valore numerico."

{ $inc : { field : value } }

Quindi, se potessi refactoring del tuo contenitore e oggetto:

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

a:

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

potresti usare l'operazione update con:

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

che creerebbe { 'foo': 1 } se 'foo' non esiste, altrimenti incrementa foo.

Es.:

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