I have documents like this one at collection x
at MongoDB:
{
"_id" : ...
"attrs" : [
{
"key": "A1",
"type" : "T1",
"value" : "13"
},
{
"key": "A2",
"type" : "T2",
"value" : "14"
}
]
}
The A1
and A2
elements above are just examples: the attrs
field may hold any number of array elements.
I'd need to access concurrently to the attrs
array from several independent clients accessing to MongoDB. For example, considers two clients, one wanting to change the value
of the element identified by key
equal to "A1" to "80" and other wanting to change the value
of the element identified by key
equal to "A2" to "20". Is there any compact way of doing it using MongoDB operations?
It is important to note that:
- Clients doesn't know the position of each element in the
attr
array, only the key of the element which value has to be modified. - Reading the whole
attrs
array in client space, searching the element to modify at client space, then updatingattrs
with the new array (in which the element to modify has been changed) would involve race conditions. - Clients also may add and remove elements in the array. Thus, doing a first search at MongoDB to locate the position of the element to modify, then update it using that particular position doesn't work in general, as elements could have been added/removed thus altering of the position previously found.