猫鼬:findOneAndUpdate返回奇怪的结构

时间:2019-02-22 09:10:48

标签: mongoose

  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对象内的一种奇怪结构返回文档。

P.S。,将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
}));

原来是猫鼬的bug ...杀死了Node进程并重新启动它之后,它现在表现正常。

2 个答案:

答案 0 :(得分:0)

原来是猫鼬的bug ...杀死了Node进程并重新启动它之后,它现在表现正常。

答案 1 :(得分:-1)

问题是,您没有提供findOneAndUpdate()的回调。根据{{​​3}},findOneAndUpdate()“ ...将找到的文档(如果有)返回到回调。如果传递了callback,则查询执行,否则返回查询对象。” < / p>

下面是他们提供的有关如何调用此函数的示例,并请注意未调用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