MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB - Adicionando a um conjunto e incrementando


Se você estiver disposto a mudar de uma lista para hash (objeto), poderá fazer isso atomicamente.

Dos documentos :"$inc ... incrementa o campo pelo valor do número se o campo estiver presente no objeto, caso contrário, define o campo para o valor do número."
{ $inc : { field : value } }

Então, se você pudesse refatorar seu container e objeto:
words: [
  {
    'word': 'foo',
    'count': 1
  },
  ...
]

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

você pode usar a operação update com:
{ $inc: { 'words.foo': 1 } }

que criaria { 'foo': 1 } se 'foo' não existir, senão incremente foo.

Por exemplo.:
$ 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   }   }
]