MongoDB: обновление каждого документа в одном поле



у меня есть коллекция с именем foo гипотетически.



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



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

471   3  

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

    Ничего не найдено.