Javascript findByIdAndUpdate()控制台记录返回,但可以';不分配给财产
我编写此函数是为了更新MongoDB中的数据:Javascript findByIdAndUpdate()控制台记录返回,但可以';不分配给财产,javascript,mongodb,express,mongoose,graphql,Javascript,Mongodb,Express,Mongoose,Graphql,我编写此函数是为了更新MongoDB中的数据: const Sequence = require('../models/sequenceSchema'); module.exports.genNumber = function () { let doc = Sequence.findByIdAndUpdate( {_id: "5e1f72951c9d440000afce53"}, {$inc:{sequence_value: 1}}, {
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;
}
)
};
在代码中,我编写了以下代码:
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:
。如果我在控制台日志中返回结果
,它会完美地显示出来,那么我不理解发生了什么。我正在使用Graphql/Mongoose/MongoDB,这是因为:
genNumber
函数没有返回任何内容genNumber
函数返回某个内容,则它将是一个承诺,并且在创建票证时使用该承诺之前,需要对其进行解析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);
}
)
})
};
=
您可以尝试以下操作:
module.exports.genNumber=(req,done)=>{Sequence.findbyiandupdate({u id:5e1f72951c9d44000afce53},{$inc:{Sequence\u value:1},{new:true},函数(err,result){if(err){console.log(err),done(err)};done(null,result.Sequence\u值)}
@srinivasy它抛出一个错误,表示TypeError:done不是一个函数
thewait functions.genNumber()
返回的是整个查询,而不是结果。sequence\u值
。这真让我头疼是的,我想我知道为什么这种情况还在发生。您需要使用genNumber
方法。我更新了代码片段。
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
});
}
})