Javascript findByIdAndUpdate()控制台记录返回,但可以';不分配给财产

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}}, {

我编写此函数是为了更新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;
        }
    )
};
在代码中,我编写了以下代码:

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不是一个函数
    the
    wait 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
        });
      }
    })