Javascript 如何允许mongooses schema.Types.ObjectId在填充时为空
我有一个叫做Route的mongoose模式,如下所示: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 },
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字段(当它没有值时)?请记住,我已经删除了所有可能显示项目性质的字段,因为它是客户的项目,我想不应该向公众显示。默认值:[]也不起作用。请找到我的解决方案作为这个问题的答案。