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

时间:2017-02-03 23:22:28

标签: javascript node.js mongodb express mongoose-schema

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

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

这就是我所拥有的,基本上是我想要实现的,但是这会引发错误,因为我设置的默认值是字符串而不是ObjectID。我不确定如何实现这个或者我可能有什么替代方案。

2 个答案:

答案 0 :(得分:1)

由于您已经指出要出于性能原因要维护强类型ObjectId,因此您必须使用与默认类型相同的类型。您可以使用全0的id,例如:

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

然后您可以检查并显示" Noob"取而代之的?

答案 1 :(得分:0)

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

title: {
  type: String,
  ref: 'Title',
  default: 'Noob'
},

您仍然可以将其设置为ObjectID - 稍后查找字符串。

您不能两种方式:如果您希望字段为ObjectID类型,则需要保留ObjectID个。如果您希望能够在其中包含字符串,则它必须是String类型。

如果title是对另一个集合中ObjectID的引用,则Mongoose在执行查找时仍会将ObjectID - ish字符串转换为ObjectID:< / p> 如果Title.find({ _id: doc.title })是字符串,

ObjectID仍会查找doc.title