express - 如何在猫鼬中添加多个模型?
问题描述
我想使用单个有效负载更新/推送到多个猫鼬模式。例如,我有 a VolSchema
、 aCaseSchema
和 a JudgeSchema
。我想将值推送到VolSchema
和JudgeSchema
每当Case
创建一个新的。当我只更新 时它已经正常工作VolSchema
,但是当添加 时JudgeSchema
,我只更新了没有 Vol 模型的 Judge 模型。
模型/案例.js
const mongoose = require("mongoose");
const CasesSchema = new mongoose.Schema({
title: String,
vol: { type: mongoose.Schema.Types.ObjectId, ref: "Vol", required:
true },
judges: [{ type: mongoose.Schema.Types.ObjectId, ref: "Judge" }],
});
module.exports = mongoose.model("Cases", CasesSchema)
模型/Vol.js
const mongoose = require("mongoose");
const VolSchema = new mongoose.Schema({
vol_no: {
type: String,
unique: true,
uppercase: false,
},
cases: [{ type: mongoose.Schema.Types.ObjectId, ref: "Cases" }],
createdAt: {
type: Date,
default: Date.now,
},
});
module.exports = mongoose.model("Vol", VolSchema);
模型/Judge.js
const mongoose = require("mongoose");
const JudgeSchema = new mongoose.Schema({
name: String,
bio: String,
cases: [{ type: mongoose.Schema.Types.ObjectId, ref: "Cases" }],
});
module.exports = mongoose.model("Judge", JudgeSchema);
解析器.js
const Vol = require("../models/Vol");
const Case = require("../models/Cases");
const Judge = require("../models/Judge");
module.exports = {
Mutation: {
addCase: async (_, { title, volID, judgesID }) => {
const newCase = await new Case({
title: title,
vol: volID,
judges: judgesID,
}).save();
const newVol = Vol.updateOne(
{ _id: volID },
{ $push: { cases: newCase } },
{ new: true },
);
const judge = Judge.updateOne(
{ _id: judgesID },
{ $push: { cases: { $each: [newCase], $position: 0 } } },
{ new: true },
);
return newVol, judge // Judge model gets updated only
return newVol // Vol gets update only
return{vol: newVol, judges: judge } // i have tried this too
},
},
};
我想将 newCase 推送到 Vol 和 Judge 模型
解决方案
这是我最好的答案,因为我不确定你在问什么。
const Vol = require("../models/Vol");
const Case = require("../models/Cases");
const Judge = require("../models/Judge");
module.exports = {
Mutation: {
addCase: async (_, { title, volID, judgesID }) => {
const newCase = await new Case({
title: title,
vol: volID,
judges: judgesID,
}).save();
const newVol = Vol.updateOne(
{ _id: volID },
{ $push: { cases: newCase } },
{ new: true },
);
const judge = Judge.updateOne(
{ _id: judgesID },
{ $push: { cases: { $each: [newCase], $position: 0 } } },
{ new: true },
);
return newVol, judge // Judge model gets updated only
return newVol // Vol gets update only
return{vol: newVol, judges: judge } // i have tried this too
},
},
};
应该是这样的
const Vol = require("../models/Vol");
const Case = require("../models/Cases");
const Judge = require("../models/Judge");
module.exports = {
Mutation: {
addCase: async (_, { title, volID, judgesID }) => {
const newCase = await new Case({
title: title,
vol: volID,
judges: judgesID,
}).save();
const newVol = await Vol.updateOne(
{ _id: volID },
{ $push: { cases: newCase } },
{ new: true },
);
const judge = await Judge.updateOne(
{ _id: judgesID },
{ $push: { cases: { $each: [newCase], $position: 0 } } },
{ new: true },
);
return newCase;
},
},
};
另外因为这是 GraphQL,如果我知道返回类型会有所帮助。我认为返回类型是 Case 而不是 newVol 或 Judge。因此,在这种情况下,您实际上会得到看起来很奇怪的结果,因为返回的不是大小写。在这种情况下,最后一行应该是 return newCase;
推荐阅读
- c - 写C函数产生不可读的文件
- c# - 无法在 C++/WinRT Xaml Islands 项目中使用来自 C# WinRT 组件的 Xaml 组件
- javascript - 在 Typescript 中过滤整数数组 - Angular 2
- c# - Xamarin Forms 中的全局资源
- python - 将时间转换为数据时间格式,保持“AM/PM”
- html - CSS Dropcap Bootstrap 5
- python - 在 PySpark 中使用列条件替换空值
- sql - 计算具有相同 id 的列的值的存储过程
- built-in - 如何覆盖 Autodesk 内置查看器扩展
- python - 有没有办法识别列表中的 IP 地址或 MAC 地址?