Nếu bạn sẵn sàng chuyển từ danh sách sang băm (đối tượng), bạn có thể thực hiện điều này một cách nguyên bản.
Từ tài liệu
:"$inc
... trường gia số theo giá trị số nếu trường có trong đối tượng, nếu không thì đặt trường thành giá trị số. "
{ $inc : { field : value } }
Vì vậy, nếu bạn có thể cấu trúc lại vùng chứa và đối tượng của mình:
words: [
{
'word': 'foo',
'count': 1
},
...
]
tới:
words: {
'foo': 1,
'other_word: 2,
...
}
bạn có thể sử dụng thao tác update
với:
{ $inc: { 'words.foo': 1 } }
sẽ tạo ra { 'foo': 1 }
nếu 'foo' không tồn tại, foo tăng khác.
Ví dụ:
$ 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 } }
]