mongoose findOneAndUpdate возвращает null как для err, так и для doc (используя Jest) - PullRequest
0 голосов
/ 08 июня 2018

Я использую метод findOneAndUpdate от Mongoose и не могу получить от него никакой полезной информации.Я пытался использовать запрос, который возвращается после его вызова (в updatedUser), но он возвращает null;Я также попытался включить аргумент обратного вызова, но когда я это делаю, я получаю null для обоих err и doc.

Контекст: я использую Jest для создания набора тестов,и написание теста для этой функции.У меня была функция, работающая в моем приложении вне набора тестов, и хотя я изменил части функции, я ничего не изменил в вызове findOneAndUpdate, кроме добавления аргумента обратного вызова.

Ожидаемое поведение: Либо «err», либо «doc» не возвращает ноль, поэтому я, по крайней мере, знаю, что происходит.

Я работал с Мокко и изучал Jest, и я обнаружил пару другихзанимательные вещи, которые делает Джест.По своему опыту я знаю, что, скорее всего, я упускаю что-то довольно очевидное, но я бы хотел, чтобы хоть раз обвинить в чем-то другом.:)

updateUser.js:

const updateUser = async (user) => {

  console.log('user in updater:', user);

  const updatedUser = await User.findOneAndUpdate(
    { _id: user._id },
    {
      $set: {
        name: user.name,
        email: user.email,
        password: user.password,
        ageRange: user.ageRange,
        gender: user.gender,

        accountCreatedAt: user.accountCreateAt,
        meetingPlaces: user.meetingPlaces,
        flags: user.flags,
        tokens: user.tokens,
      }
    },
    { new: true },
    (err, doc) => {
      console.log(err, doc);
    }
  );

  //placeholders until I get some kind of usable response from findOneAndUpdate
  return {err: false, res: 'cat'};
};

вывод терминала:

 console.log server/db/crud_Users/updateUser.js:8
   user in updater: { _id: 5b1aa9a146b59048dd86dbc2,
     name: 'test',
     email: '24479981326297030000@test.com',
     password: 'testtest',
     ageRange: '1',
     gender: 'Female',
     accountCreatedAt: '2018-06-08T11:06:57-05:00',
     meetingPlaces: [],
     flags: [],
     tokens: [],
     homeLocations: [],
     hostedEvents: [],
     attendingEvents: [],
     __v: 0 }

 console.log server/db/crud_Users/updateUser.js:28
   null null

 console.log server/db/crud_Users/updateUser.js:32
    updatedUser: null

Ответы [ 2 ]

0 голосов
/ 16 июня 2018

Спасибо, что хорошо объяснили проблему.В официальной документации MongoDB здесь упоминается, что findOneAndUpdate обновляет первый документ в коллекции, соответствующий запросу, и возвращает исходный документ.

Я предположил, что оба errи doc равны нулю, поскольку документ, который вы хотите обновить, не существует в вашей коллекции.В документации не упоминается, каково поведение findOneAndUpdate, если нет документа, соответствующего запросу.Итак, я попытался углубиться в это.

Я видел в документации (вы можете узнать больше об этом здесь ), что, если параметр upsert не упомянут, он будет принимать false в качестве значения по умолчанию.И здесь, в части PS, я видел, что если upsert равно false, а документ не существует, то doc будет null.

0 голосов
/ 13 июня 2018

РЕДАКТИРОВАТЬ: не правильно - см другой ответ.Я понял это.Я возвращал переменную асинхронно до того, как она получила значение, так что в конце концов это не было проблемой findOneAndUpdate.: /

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