Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何允许mongooses schema.Types.ObjectId在填充时为空_Javascript_Node.js_Express_Mongoose - Fatal编程技术网

Javascript 如何允许mongooses schema.Types.ObjectId在填充时为空

Javascript 如何允许mongooses schema.Types.ObjectId在填充时为空,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我有一个叫做Route的mongoose模式,如下所示: const mongoose = require("mongoose"); const collection_label = "routes"; const class_label = "Routes"; const schema = mongoose.Schema( { createdOn: { type: Date, default: Date.now },

我有一个叫做Route的mongoose模式,如下所示:

const mongoose = require("mongoose");
const collection_label = "routes";
const class_label = "Routes";
const schema = mongoose.Schema(
  {
    createdOn: { type: Date, default: Date.now },
    attachedSubTasks: [
      { type: Schema.Types.ObjectId, ref: "Subtasks", default: "" },
    ],
  },
  { collection: class_label }
);
事实上,有时字段可以是空数组,但当我想要创建路由时,会出现以下错误:

ValidationError: Routes validation failed: attachedSubTasks: Cast to [ObjectId] failed for value "[""]" at path "attachedSubTasks"
有没有一种方法可以接受这个事实,即它可以是空的?
我在没有默认设置的情况下进行了尝试,默认设置为:“”,默认设置为null

您需要在模式中将默认设置为
null
,而不是
“”

您还可以通过这种方式在模式中定义附件子任务

attachedSubTasks: {
  type: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Subtasks"
    }
  ],
  default: []
}

我发现解决这个问题的方法可以在后端实现。在下面的示例中,我刚刚检查了对象的键值长度是否小于一(1),如果为true,我将删除对象的键,以便mongoose的模式不考虑这一点

router.post("/", async (c, r) => {
  let receivedData = c.body;
    receivedData["attachedSubTasks"].length < 1? delete receivedData["attachedSubTasks"]: false
    returnedValue = await mongoose.saveOne(Routes, receivedData);
    statRes.status(200, r, returnedValue);
});
router.post(“/”,异步(c,r)=>{
设receivedData=c.body;
receivedData[“attachedSubTasks”]。长度<1?删除receivedData[“attachedSubTasks”]:false
returnedValue=wait mongoose.saveOne(路由、接收数据);
状态(200,r,返回值);
});

如果有人有更好的解决方案,请毫不犹豫地告诉我。

我尝试过,但这不起作用。首先,为什么在这种情况下使用默认值?attachedSubTasks是一个子任务数组\u id它意味着如果您想为attachedSubTasks创建一个空数组的文档,您可以,您不需要在模式中为它定义默认值。这是我问题的全部,因为我这样做时出错,当我将这些值发送到DB attachedSubTasks时,这些值不是必需的。当您创建文档时,您是否同意只发送createdOn字段而不发送attachedSubTasks字段(当它没有值时)?请记住,我已经删除了所有可能显示项目性质的字段,因为它是客户的项目,我想不应该向公众显示。默认值:[]也不起作用。请找到我的解决方案作为这个问题的答案。