2017-01-22 2 views
3

Предполагая, что «элементы» (предоставленные в качестве параметра в методе Set() ниже) определяются как List (TM - некоторый тип структуры, т. Е. Сделанный только из свойств), содержащий только один элемент и 10 процессов, пытающихся записать одновременно обновление для items (без добавляя ничего к списку):Как строители <TA> .Update.Set() обрабатывать параллельный доступ?

Builders<TK>.Update.Set("Items", items); 

обновление означает, что существует, по крайней мере, один элемент в BSON с модифицированным значением.

Что будет MongoDB в таком случае?

Будет ли он в конечном итоге перезаписываться последним процессом в том, что одиночный элемент (оставляя этот список одним элементом)?

или будет добавить 10 таких элементов (элементов) в этот список?

ответ

2

Я не знаю, как это работает с параллельным доступом. Но Set operator всегда перезаписывает значение с вставленным.

Чтобы добавить новые значения в массив, вы должны использовать addToSet operator (он добавляет только новые значения) или push operator.

Вы можете получить доступ к ним в качестве строителей тоже:

Builders<TA>.Update.AddToSet 
Builders<TA>.Update.Push 
+0

Thanks +1. Меня действительно интересует поведение перезаписи. Причина, по которой я задаю свой вопрос, заключается в том, что по какой-то странной причине оператор Set * добавляет * вместо перезаписи. Weird. – datps

+1

@ datps У вас есть образец кода? По моему мнению, этого не должно быть. –

+0

Оказывается, это действительно не может случиться. Ошибка была в другом месте, в оригинальных документах MongoDB для начала. Так много для наследования чужих плодов труда ... – datps