Подтвердить что ты не робот

Параметры MongoDB mongoose collection.find Предупреждение об устаревании

При запросе документов с помощью метода collection.find я начал получать следующее предупреждение в консоли

DeprecationWarning: опция collection.find [поля] устарела и будет удалена в более поздней версии

Почему я вижу это и как это исправить? (Возможные альтернативы)

EDIT: добавлен запрос

Session
        .find({ sessionCode: '18JANMON', completed: false })
        .limit(10)
        .sort({time: 1})
        .select({time: 1, sessionCode: 1});

Версия Mongoose 5.2.9

4b9b3361

Ответ 1

Обновить:

5.2.10 выпущен и доступен для загрузки здесь.

Используйте mongoose.set('useCreateIndex', true); чтобы mongooose createIndex метод createIndex в собственном драйвере mongodb.

Для получения дополнительной информации о документах вы можете просмотреть страницу https://mongoosejs.com/docs/deprecations

Для получения дополнительной информации об этой проблеме и ее исправлении https://github.com/Automattic/mongoose/issues/6880

Оригинальный ответ:

Версия Mongoose 5.2.9 обновила собственный драйвер mongodb до 3.1.3, в который были добавлены изменения для выдачи предупреждающих сообщений при вызове метода устаревших родных драйверов.

fields устаревает и заменяется опцией projection.

Вам придется подождать, пока мангуста внесет изменения в конце, чтобы заменить опцию полей проекцией. Исправление запланировано на выпуск 5.2.10.

На данный момент вы можете вернуться к 5.2.8, который будет подавлять все предупреждения об отказе.

npm install [email protected]

Для всех других устаревших предупреждений вы должны обращаться к ним в каждом случае.

Вы увидите другие предупреждения об устаревании при использовании других методов сбора.

DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
DeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.
DeprecationWarning: collection.save is deprecated. Use insertOne, insertMany, updateOne, or updateMany instead.
DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.

Все findOne* mongoose по умолчанию используют метод findAndModify который устарел в собственном драйвере mongodb.

Используйте mongoose.set('useFindAndModify', false); чтобы mongooose вызывал соответствующий метод findOne* на собственном драйвере mongodb.

Для remove и update замените эти вызовы методами delete* и update* соответственно.

Для save замените эти вызовы методами insert*/update* соответственно.

Ответ 2

Вы можете сделать npm install [email protected] и это поможет вам вернуться к более ранней версии, которая не будет показывать предупреждения об отказе

Ответ 3

После обновления до версии 5.2.10. Любой из приведенных ниже вариантов может быть использован

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', {
  useCreateIndex: true,
  useNewUrlParser: true
})
.then(() => console.log('connecting to database successful'))
.catch(err => console.error('could not connect to mongo DB', err));

const mongoose = require ('mongoose'); mongoose.set('useCreateIndex', true) mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true}).then(() => console.log("соединение с базой данных успешно")). catch (err => console.error("не удалось подключиться к mongo DB", err));