MongoDB: обновлять каждый документ на одном поле

Я предположительно собрал имя foo гипотетически.

Каждый экземпляр foo имеет поле с именем lastLookedAt, которое является временной отметкой UNIX с эпохи. Я хотел бы иметь возможность пройти через клиент MongoDB и установить эту метку времени для всех существующих документов (около 20 000 из них) для текущей метки времени.

Каков наилучший способ справиться с этим?

В оболочке Mongo или с любым клиентом Mongodb:

• Для Mongodb> = 3.2:

db.foo.updateMany({}, {$set: {lastLookedAt: Date.now() / 1000}})

См. http://docs.mongodb.org/manual/tutorial/modify-documents/#update-multiple-documents

  • {} – это условие (пустое условие соответствует любому документу)
  • {$set: {lastLookedAt: Date.now() / 1000}} – это то, что вы хотите сделать

• Для Mongodb> = 2.2:

db.foo.update({}, {$set: {lastLookedAt: Date.now() / 1000}}, { multi: true })

См. http://docs.mongodb.org/manual/tutorial/modify-documents/#update-multiple-documents

  • {} – это условие (пустое условие соответствует любому документу)
  • {$set: {lastLookedAt: Date.now() / 1000}} – это то, что вы хотите сделать
  • {multi: true} – это опция «обновить несколько документов»

• Для Mongodb <2.2:

db.foo.update({}, {$set: {lastLookedAt: Date.now() / 1000}}, false, true)

См. https://web.archive.org/web/20120613233453/http://www.mongodb.org/display/DOCS/Updating

  • {} – это условие (пустое условие соответствует любому документу)
  • {$set: {lastLookedAt: Date.now() / 1000}} – это то, что вы хотите сделать
  • false для параметра «upsert» (вставить, если нет, или обновление – не то, что вы хотите)
  • true для параметра «multi» (обновление нескольких записей)

Этот код будет полезен для вас

  Model.update({ 'type': "newuser" }, { $set: { email: "[email protected]", phoneNumber:"0123456789" } }, { multi: true }, function(err, result) { console.log(result); console.log(err); }) 

Я использую драйвер MongoDB .NET чуть больше месяца. Если бы я сделал это с помощью .NET-драйвера, я бы использовал метод Update для объекта коллекции. Сначала я построю запрос, который доставит мне все документы, которые меня интересуют, и сделаю обновление в полях, которые я хочу изменить. Обновление в Mongo влияет только на первый документ и для обновления всех документов, полученных в результате запроса, нужно использовать флаг обновления «Multi». Пример кода …

 var collection = db.GetCollection("Foo"); var query = Query.GTE("No", 1); // need to construct in such a way that it will give all 20K //docs. var update = Update.Set("timestamp", datetime.UtcNow); collection.Update(query, update, UpdateFlags.Multi); 
  • Как агрегировать по году-месяцу в другой часовой пояс
  • Фильтрация встроенных документов в MongoDB
  • Mongodb $ push в вложенном массиве
  • Ошибка: getaddrinfo ENOTFOUND в nodejs для вызова
  • MongoDB не может запустить сервер: механизм хранения по умолчанию «wiredTiger» недоступен в этой сборке mongod
  • Как преобразовать свойство в MongoDB из текста в дату?
  • Самый быстрый способ удаления дубликатов документов в mongodb
  • Как обойти отсутствие транзакций в MongoDB?
  • Монгодская структура агрегации | Группировать по нескольким значениям?
  • Как суммировать все поля в дополнительном документе MongoDB?
  • Как я могу использовать cursor.forEach () в MongoDB с помощью Node.js?
  • Давайте будем гением компьютера.