MongoDB: обновление каждого документа в одном поле
у меня есть коллекция с именем foo гипотетически.
каждый экземпляр foo имеет поле под названием lastLookedAt, которое является меткой времени UNIX с эпохи. Я хотел бы иметь возможность пройти через клиент MongoDB и установить эту временную метку для всех существующих документов (около 20 000 из них) на текущую временную метку.
каков наилучший способ справиться с этим?
3 ответов:
в оболочке 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
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 для объекта collection. Во-первых, я построю запрос, который получит все документы, которые меня интересуют, и обновит поля, которые я хочу изменить. Обновление в Mongo влияет только на первый документ, и для обновления всех документов, полученных в результате запроса, необходимо использовать флаг "Multi" update. Ниже приведен пример кода...
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);
Comments