Я предположительно собрал имя foo
.
Каждый экземпляр foo
имеет поле с именем lastLookedAt, которое является временной отметкой UNIX с эпохи. Я хотел бы пройти через клиент MongoDB и установить эту метку времени для всех существующих документов (около 20 000 из них) для текущей метки времени.
Какой лучший способ справиться с этим?
Ответ 1
В оболочке 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" (обновление нескольких записей)
Ответ 2
Этот код будет полезен для вас
Model.update({
'type': "newuser"
}, {
$set: {
email: "abc@gmail.com",
phoneNumber:"0123456789"
}
}, {
multi: true
},
function(err, result) {
console.log(result);
console.log(err);
})
Ответ 3
Я использую драйвер 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);