Als je bereid bent om van een lijst naar hash (object) over te schakelen, kun je dit atomair doen.
Van de docs
:"$inc
... verhoogt het veld met de getalswaarde als het veld aanwezig is in het object, anders stelt het veld in op de getalswaarde."
{ $inc : { field : value } }
Dus als u uw container en object zou kunnen refactoren:
words: [
{
'word': 'foo',
'count': 1
},
...
]
naar:
words: {
'foo': 1,
'other_word: 2,
...
}
je zou de operatie update
kunnen gebruiken met:
{ $inc: { 'words.foo': 1 } }
die { 'foo': 1 }
. zou creëren als 'foo' niet bestaat, verhoog dan foo.
Bijv.:
$ 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 } }
]