我正在使用Apollo Graphql,Express-Nodejs,MongoDB和Mongoose . 我有2个集合:商业和订单 .
这是模型
以下是graphql类型:
这是突变:
createBusiness(
name: String,
address: String,
): Business
createOrder(
orderNumber: String,
businessName: String,
additionalDetails: String
): Order
特定的业务可以有多个订单,特定的订单必须具有一个特定的业务 .
我想要做的是为Business文档创建一个订单 .
Case 1.) If the Business document doesn't exists: 然后createOrder变异应该创建新的业务文档(通过使用填充)
Case 2.) But If the Business document exists ,然后createOrder变异不应创建新的业务单据,只应添加新订单和对现有业务单据的引用 .
Could someone please let me know how can I fulfill the above in the graphql and mongoose ? 任何建议都会有所帮助!
这是我的订单突变解析器(它不工作,不知道为什么!!)
import Order from '../models/Order';
import Business from '../models/Business';
export default {
Mutation:{
createOrder(_, {
orderNumber,
additionalDetails,
businessName
}){
return Business.findOne({
businessName: businessName
})
.then((exist)=>{
if (!exist){
let business_Name = new Business({
name: businessName
})
business_Name.save(function (err){
if (err) return handleError(err);
let order = new Order({
orderNumber: orderNumber,
businessName: business_Name._id,
additionalDetails: additionalDetails
});
order.save(function (err){
if (err) return handleError(err);
});
});
}
if (exist){
// WHAT SHOULD I DO FOR THIS CASE ??
}
});
},
}
}
提前致谢 !
1 回答
我略微修改了案例1的逻辑,这样如果商业名称不存在,则不应该允许创建订单 . 好像有人未经授权允许在订单变异中创建业务,那么我们可能必须处理其他可选参数(仅针对案例1),使“createOrder”变异更加麻烦且不那么合乎逻辑 .
相反,我们会向客户端用户通知案例1的一些有用的消息,而对于案例2,当业务存在时,我们会:
1.)首先创建新订单,然后将其推送到业务类型的"orders"列表,然后保存它(因为类型业务需要这个对其子订单数组的引用)(请阅读:Saving Refs to Children)
2.)然后是时候保存新创建的订单并填充“businessReference” .
这是createOrder变异的完整代码......
因为exec()只有在没有任何参数的情况下才会返回promise,所以我就这样返回了 . 有关这方面的更多信息,请查看this awesome explained stackoverflow post