如何使用动态密钥的mongoose模型架构?

时间:2016-03-25 21:49:00

标签: node.js mongoose-schema

我正在使用mongoose和nodejs,我需要创建一个动态模式模型, 这是我的代码:

schema.add({key : String});

key =" user_name",但在我的数据库中我发现该模型将其视为关键

{ key : "Michele" } and not { user_name: "Michele"}

我该怎么办?谢谢。

4 个答案:

答案 0 :(得分:2)

同样的问题schema with variable key在mongoose中讨论,

  

目前不可能。最近的替代方法是使用strict: falsemixed架构类型。

答案 1 :(得分:0)

如果我的理解正确,您想为架构中的add动态生成一个新列key。例如。可能是每个用户的帖子集合,其中帖子的标题是关键。如果用户创建了新帖子,则会将其添加到他的收藏集中,并带有密钥作为其帖子的标题。

最初的时间

let schema = new Schema({ id: String, ... , key: String })

猫鼬从字面上取了key,就像从字面上取了id一样。

之所以不能将键动态添加到模式的根目录,是因为猫鼬无法保证任何结构。您也可以像其他人建议的那样strict: false来使整个模式成为自由格式。

但是,如果您不想使整个模式成为自由格式,而只是其中的一部分,则还可以修改模式以使用mixed

let schema = new Schema({ id: String, ... , posts: Schema.Types.Mixed })

现在,您可以将所有动态生成的密钥保存在自由格式的posts下。

您也可以使用map进行上述操作:

let schema = new Schema({ id: String, ... , posts: {type: Map, of: String} })

这将允许您在posts结构内创建任何键值对。

答案 2 :(得分:0)

您可以这样做:

posts: { type: Object }

在内部发布键中,您可以实现任何想要的键值对

答案 3 :(得分:0)

const options = {};
options[key] = String;

schema.add(options);