首页 > 解决方案 > 如何在猫鼬中添加多个模型?

问题描述

我想使用单个有效负载更新/推送到多个猫鼬模式。例如,我有 a VolSchema、 aCaseSchema和 a JudgeSchema。我想将值推送到VolSchemaJudgeSchema每当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 模型

标签: expressmongoosegraphql

解决方案


这是我最好的答案,因为我不确定你在问什么。

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;


推荐阅读