Я использую node и mongodb, и я хочу обновить документ и добавить дату изменения. У меня проблема при обновлении во второй раз. Конкретный случай сбоя во второй раз заключается в следующем:
- документ уже существует, но не имеет поля 'lastModified'.
- При первой модификации поле 'lastModified' добавляется с правильным значением.
- вторая модификация должна обновить поле 'lastModified' с текущей датой, но не может.
Показана ошибка:
{"driver": true, "name": "MongoError", "index": 0, "code": 40, "errmsg": "Обновление пути 'lastModified' приведет к конфликту в 'lastModified'" }, "Титулы": нулевая}}
документ на монго:
{
_id" : ObjectId("5af07316fc5f13c574ba825b"),
"field1" : "value1"
}
мой код для обновления:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
let url = 'some mongo url';
let database = 'some database';
let newData = {'field1':'newValue1'}
(async function() {
let client;
try {
client = await MongoClient.connect(url , {useNewUrlParser: true});
let database = client.db(database);
let result = await database.collection(collection).updateOne(filter, {
$set: newData,
$currentDate: {'lastModified': true}
});
assert.equal(1, result.matchedCount);
assert.equal(1, result.modifiedCount);
// Close connection
client.close();
} catch (err) {
console.log(err.stack);
}
// Close connection
client.close();
})();
После первого обновления документ в БД:
{
_id" : ObjectId("5af07316fc5f13c574ba825b"),
"field1" : "value1",
"lastModified" : ISODate("2018-09-07T23:18:21.485Z")
}
Что правильно.
Во второй раз, когда я пытаюсь обновить, это не удается.
Я использую:
"mongodb": "^3.1.4",
"node": "^10.10.0",
Есть предложения, что может быть не так?
Edit:
После первого обновления данные берутся из базы данных, а затем выполняется второе обновление.