Mongoose .findByIdAndUpdate() 控制台记录返回但无法分配给属性
Posted
技术标签:
【中文标题】Mongoose .findByIdAndUpdate() 控制台记录返回但无法分配给属性【英文标题】:Mongoose .findByIdAndUpdate() console log the return but can't assign to a property 【发布时间】:2020-05-02 21:04:14 【问题描述】:我写了这个函数来更新 MongoDB 中的数据:
const Sequence = require('../models/sequenceSchema');
module.exports.genNumber = function ()
let doc = Sequence.findByIdAndUpdate(
_id: "5e1f72951c9d440000afce53",
$inc:sequence_value: 1,
new: true,
function(err,result)
if(err) return console.log(err)
return result.sequence_value;
)
;
在 Mutation resolve 我写了这段代码:
const graphql = require('graphql');
const functions = require('../modules/functions');
const Mutation = new GraphqlObjectType(
(..)
resolve(parent,args)
let ticket = new Ticket(
name: args.name,
number: functions.genNumber(),
opendate: Date(),
product: args.product,
priority: args.priority,
status: args.status,
deadline: calcs.deadline(Date(),args.priority),
userid: args.userid
);
我的问题是函数 findByIdAndUpdate()
更新了 MongoDB 上的值,但没有分配给属性 number:
。如果我在控制台日志中返回result
,它会完美显示,我不明白发生了什么。我正在使用 Graphql/Mongoose/MongoDB
【问题讨论】:
你能试试这个吗 ::module.exports.genNumber = (req, done) => Sequence.findByIdAndUpdate( _id: "5e1f72951c9d440000afce53" , $inc: sequence_value: 1 , new: true , function (err, result) if (err) console.log(err), done(err) ; done(null, result.sequence_value) ) ;
@srinivasy 它抛出一个错误说TypeError: done is not a function
【参考方案1】:
之所以会这样,是因为:
genNumber
函数没有返回任何内容
如果genNumber
函数返回某些内容,这将是一个承诺,并且需要在创建票证时使用该承诺。
这个更新的代码 sn-p 应该可以工作:
const Sequence = require('../models/sequenceSchema');
module.exports.genNumber = function ()
// Notice the return statement below
return new Promise((resolve, reject) =>
Sequence.findByIdAndUpdate(
_id: "5e1f72951c9d440000afce53" ,
$inc: sequence_value: 1 ,
new: true ,
function (err, result)
if (err)
console.log(err);
return reject(err);
console.log('Result: ', result);
return resolve(result.sequence_value);
)
)
;
=
const Mutation = new GraphqlObjectType(
// (..)
// Notice the resolve method becomes an asynchronous
resolve: async (parent, args) =>
// Notice the await on functions.genNumber call
const number = await functions.genNumber();
let ticket = new Ticket(
name: args.name,
number: number,
opendate: Date(),
product: args.product,
priority: args.priority,
status: args.status,
deadline: calcs.deadline(Date(), args.priority),
userid: args.userid
);
)
【讨论】:
await functions.genNumber();
正在返回整个查询而不是 result.sequence_value
。这真的让我头疼
是的,我想我知道为什么仍然会发生这种情况。您需要承诺化 genNumber
方法。我更新了代码 sn-p。以上是关于Mongoose .findByIdAndUpdate() 控制台记录返回但无法分配给属性的主要内容,如果未能解决你的问题,请参考以下文章
mongoose入门以及 mongoose 实现数据 的增删改查
Mongoose 错误 - 具有相同型号名称的 Mongoose 型号
使用 mongoose.createConnection() 与 mongoose.connect() 时查询挂起