Mongoose: findOneAndUpdate возвращает странную структуру - PullRequest
0 голосов
/ 22 февраля 2019
  a = await db.a.findOneAndUpdate({id}, {...doc}, {
    upsert: true,
    new: true
  });
  b = await db.b.findOneAndUpdate({id}, {...doc}, {
    upsert: true,
    new: true
  });

a возвращает нормальный результат

{...}

b возвращает странный результат

{
    "$__":
    {
        "strictMode": true,
        ...
    },
    "isNew": false,
    "_doc":
    {
        ...
    },
    "$init": true
}

Вместо того, чтобы возвращать документ в объекте, Mongoose возвращает документ в странной структурев _doc объект.

PS, установка rawResult false не помогает.

Это модель a и модель b:

db.a = mongoose.model('a', (Schema, ObjectId) => new Schema({
    objectid: ObjectId,
    title: String
}));
db.b = mongoose.model('b', (Schema, ObjectId) => new Schema({
    objectid: ObjectId,
    text: String
}));

Оказывается, это ошибка Мангуста ... после уничтожения процесса Node и его перезапуска он теперь ведет себя нормально.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Оказывается, это ошибка Mongoose ... после уничтожения процесса Node и его перезапуска, он теперь ведет себя нормально.

0 голосов
/ 23 февраля 2019

Проблема в том, что вы не предоставляете findOneAndUpdate() обратный вызов.Согласно документам mongoose , findOneAndUpdate() "... возвращает найденный документ (если есть) обратному вызову. Запрос выполняется, если передано callback, в противном случае возвращается объект Query."

Ниже приводятся примеры того, как вызывать эту функцию, и обратите внимание на примеры, не вызывающие callback (что аналогично тому, как вы ее вызываете), возвращают Query.

A.findOneAndUpdate(conditions, update, options, callback) // executes
A.findOneAndUpdate(conditions, update, options)  // returns Query
A.findOneAndUpdate(conditions, update, callback) // executes
A.findOneAndUpdate(conditions, update)           // returns Query
A.findOneAndUpdate()                             // returns Query
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...