Mongoose:findOneAndUpdate返回奇怪的结构

Mongoose:findOneAndUpdate返回奇怪的结构,mongoose,Mongoose,返回正常结果 a = await db.a.findOneAndUpdate({id}, {...doc}, { upsert: true, new: true }); b = await db.b.findOneAndUpdate({id}, {...doc}, { upsert: true, new: true }); b返回奇怪的结果 {...} Mongoose没有在对象中返回文档,而是在_docobject中以奇怪的结构返回文档 另外

返回正常结果

  a = await db.a.findOneAndUpdate({id}, {...doc}, {
    upsert: true,
    new: true
  });
  b = await db.b.findOneAndUpdate({id}, {...doc}, {
    upsert: true,
    new: true
  });
b返回奇怪的结果

{...}
Mongoose没有在对象中返回文档,而是在_docobject中以奇怪的结构返回文档

另外,将rawResult设置为false没有帮助

这些是a型和b型:

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

它原来是一个Mongoose bug…在杀死节点进程并重新启动它之后,它现在的行为正常。

问题是,您没有提供findOneAndUpdate回调。根据,findOneAndUpdate…将找到的文档(如果有)返回回调。如果传递回调,则执行查询,否则返回查询对象

下面是他们提供的如何调用此函数的示例,请注意,这些示例没有调用回调函数,这与您调用回调函数返回查询的方式类似


它原来是一个Mongoose bug…在杀死节点进程并重新启动后,它现在运行正常。

请共享您的模型。在我看来,您没有适当地使用mongoose,这可能是在查询之前等待的问题,这意味着结果就是查询的已解决承诺。在这种情况下,查询是所需的结果。另外,您的答案也没有解释为什么db.a返回正确的格式,而db.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
}));
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