У меня есть сборник названный foo
гипотетически.
Каждый экземпляр foo
имеет поле lastLookedAt, которое является отметкой времени UNIX с начала эпохи. Я хотел бы иметь возможность пройти через клиента MongoDB и установить эту метку времени для всех существующих документов (около 20 000 из них) на текущую метку времени.
Какой лучший способ справиться с этим?
Ответы:
Независимо от версии, для вашего примера,
<update>
это:Однако, в зависимости от вашей версии MongoDB, запрос будет выглядеть по-разному. Независимо от версии ключ заключается в том, что пустое условие
{}
будет соответствовать любому документу . В оболочке Mongo или с любым клиентом MongoDB:$ version> = 3.2 :
{}
это условие (пустое условие соответствует любому документу)3.2> $ version> = 2.2 :
{}
это условие (пустое условие соответствует любому документу){multi: true}
это опция "обновить несколько документов"$ версия <2.2 :
{}
это условие (пустое условие соответствует любому документу)false
для параметра " upsert "true
для параметра "multi" (обновить несколько записей)источник
Этот код будет полезен для вас
источник
Я использую драйвер MongoDB .NET чуть больше месяца. Если бы я делал это с помощью драйвера .NET, я бы использовал метод Update для объекта коллекции. Сначала я создам запрос, который получит все интересующие меня документы и обновит поля, которые я хочу изменить. Обновление в Mongo влияет только на первый документ, и для обновления всех документов, полученных в результате запроса, необходимо использовать флаг обновления «Multi». Пример кода следует ...
источник