Я перемещаю базу данных из Mlab в MongoDB Atlas. Нам пришлось обновить npm версию mongodb до 3.4.1
, так как версия базы данных MongoDB atlas 4.2.5
.
Функция соединения была обновлена, как сказано в этом ответе . Но после обновления версии npm до 3.4.1
запрос findOne возвращает нулевое значение, даже если документ доступен в коллекции. Вот фрагмент кода, относящийся к запросу findOne,
db.collection('organisations').findOne({ _id: database.ObjectID(orgState) })
.then((activeOrganisation) => {
console.log(activeOrganisation);
data.activeOrganisation = activeOrganisation;
callback(null, activeOrganisation);
}, (error) => {
callback(error, null);
});
. Из-за этого мне было интересно, есть ли проблема с подключением к базе данных, поэтому я протестировал его с помощью db.serverConfig.isConnected()
, db.databaseName
и db.listCollections().toArray()
. isconnected
вернул true
, и возвращенное имя базы данных также является правильным. Но db.listCollections().toArray()
вернул пустой массив, что означает, что в моей базе данных нет коллекций, которых не может быть.
Затем я попытался findOneAndUpdate
запрос, чтобы просто проверить, что происходит с этим. Вот соответствующий код для него:
db.collection('users').findOneAndUpdate(
{ emails: { $elemMatch: { email: "rajitha1591@outlook.com" } } },
{ $addToSet: { unsubscribedEmails: "models" } })
.then((result) => {
console.log(result);
if (!result) {
console.error('Error: ', 'User not found')
}
console.log('Output: ', 'Sucessfully unsubscribed');
callback(null,'Successful')
}, (error) => {
callback(error, null);
});
Результат содержит
{
lastErrorObject: { n: 0, updatedExisting: false },
value: null,
ok: 1,
'$clusterTime': {
clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1586436331 },
signature: { hash: [Binary], keyId: [Long] }
},
operationTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1586436331 }
}
Это ясно говорит о том, что документ не обновлялся (updatedExisting: false
). Я проверил соответствующий документ в MongoDB Atlas с помощью веб-браузера, и документ не был обновлен путем добавления значения "models"
в массив unsubscribedEmails
.
В дополнение к этому я попытался установить fre sh node_modules
, удалив также package-lock.json
.
Поскольку я перенес базу данных из mlab, возможно, что она превышает пределы общего кластера MongoDB для возникновения этой проблемы.
Было бы неплохо услышать предложения по этой проблеме