Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 如何在mongoose模式中设置与已定义类型不同的属性类型?_Javascript_Node.js_Mongodb_Express_Mongoose Schema - Fatal编程技术网

Javascript 如何在mongoose模式中设置与已定义类型不同的属性类型?

Javascript 如何在mongoose模式中设置与已定义类型不同的属性类型?,javascript,node.js,mongodb,express,mongoose-schema,Javascript,Node.js,Mongodb,Express,Mongoose Schema,我在论坛上为用户配置文件设置了Mongoose模式。我想做的是将用户的论坛标题设置为ObjectID,并引用标题模式。我已经把这个部件安装好了。但是,默认情况下,我希望此字段是一个名为“Noob”的字符串,直到从用户配置文件中设置了标题,然后将此值更改为引用数据库中标题的ObjectID title: { type: mongoose.Schema.Types.ObjectId, ref: 'Title', default: 'Noob' }, 这就是我所拥有的,基本上也是我想要实

我在论坛上为用户配置文件设置了Mongoose模式。我想做的是将用户的论坛标题设置为
ObjectID
,并引用标题模式。我已经把这个部件安装好了。但是,默认情况下,我希望此字段是一个名为“Noob”的字符串,直到从用户配置文件中设置了标题,然后将此值更改为引用数据库中标题的
ObjectID

title: {
  type: mongoose.Schema.Types.ObjectId,
  ref: 'Title',
  default: 'Noob'
},

这就是我所拥有的,基本上也是我想要实现的,但是这会引发一个错误,因为我设置的默认值是字符串,而不是
ObjectID
。我不知道如何实现这一点,也不知道我有什么选择。

你可以把它变成一个字符串:

title: {
  type: String,
  ref: 'Title',
  default: 'Noob'
},
以后,您仍然可以将其设置为具有
ObjectID
外观的字符串

不能两全其美:如果希望字段是
ObjectID
类型,则需要保存
ObjectID
s。如果您希望能够在其中保存字符串,那么它的类型必须是
String

如果
title
引用了另一个集合中的
ObjectID
,Mongoose在执行查找时仍会将
ObjectID
-ish字符串转换为
ObjectID


Title.find({u id:doc.Title})
如果
doc.Title
是一个字符串,则仍将查找
ObjectID

既然您已经指出出于性能原因希望维护强类型
ObjectID
,那么您必须使用与默认类型相同的类型。您可以使用所有0的id,例如:

title: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Title",
    default: 00000000-0000-0000-0000-000000000000
}

然后,您可以检查此项并在稍后的位置显示“Noob”?

为什么不将类型设置为
字符串
,并在设置标题后将
ObjectId
转换为
string
?@brandonscript,以便将其作为字符串开始。那么当用户第一次将其设置为ObjectID时?我是否仍然能够以这种方式保留“ref:'Title'”?不,我的意思是,在运行过程中,将ObjectId转换为string
this.ObjectId.toString()
Hm。这是否会破坏使用ObjectId作为引用的目的?我使用ObjectID作为数据类型,以便在数据库中存储时使用更少的内存。该应用程序预计将非常大,有100个数千个帐户,因此即使是内存存储大小的最小变化也有点大。默认字符串在用户更改之前只是一个临时度量值,此时我希望将其转换为ObjectDSure,但是您将无法使用“noob”(字符串)作为默认值。使用所有0的ObjectId怎么样?这似乎是我的用例的最佳答案。起初我没有想到这一点,但它肯定能起作用。谢谢