javascript - Mongoose .findByIdAndUpdate() 控制台记录返回但无法分配给属性
问题描述
我编写了这个函数来更新 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 上的值,但没有分配给 property number:
。如果我result
在控制台日志中返回它完美显示,我不明白发生了什么。我正在使用 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);
}
)
})
};
=
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
});
}
})
推荐阅读
- php - 从 SOAP/JSON 中提取值
- socket.io - 如何在tomcat中实现netty-socketio?
- c - 如何将结构中的一些信息打包到 2 字节缓冲区中?
- google-play-console - 如何处理短信/通话记录的谷歌控制台发布声明表
- meteor - 在通过 snap 安装的 Rocketchat 中访问流星外壳
- google-apps-script - 无法从独立脚本(Google Apps 脚本)激活工作表
- javascript - 在 Back4App 中使用 JS 按日期查询
- docker - 如何在同一台 Windows 机器上的 Windows Docker 容器上将顺序 IP 地址分配给多个托管的 .net 核心 api
- haskell - Haskell 标记“#”
- r - 混淆矩阵创建问题