Mongoose 变量键名

Posted

技术标签:

【中文标题】Mongoose 变量键名【英文标题】:Mongoose variable key name 【发布时间】:2012-12-21 04:26:02 【问题描述】:

我有一个mongo 对象并希望通过mongoose 访问它以用于我的网络应用程序。我定义的架构有一个 Object 存储用户 ID 和一个 3 级值(是、可能或否)。

例如

"user_info": 
    "<id_value_1>": "y",
    "<id_value_2>": "n"

上面的id_value_*s 是用户会话ID,因此是一长串随机字符。如何为此创建mongoose Schema

    user_info: String, String 有用吗?

    我可以重组它,使user_info 是一个对象数组 "sessionid": "&lt;value&gt;", "value: "y",这样可以,这是最好的选择吗?

【问题讨论】:

【参考方案1】:

如果您在架构中避免使用动态键并遵循您的第二个想法,您会做得更好:

user_info: [sessionid: String, value: String]

您可以使用$ positional operator 将单个user_info 数组元素更新为sessionid

【讨论】:

您能否详细说明为什么最好避免使用动态键?难道只是因为猫鼬处理不了? @ruX 你不能索引动态键,它们很难构建查询,你不能为它们定义一个有用的 Mongoose 模式......【参考方案2】:

您可以像这样尝试混合模式类型

var user = new Schema(
   info:    [Schema.Types.Mixed]
 );

user.info =  any:  thing: 'i want'  ;
user.markModified('info');

您可以阅读更多关于它的信息here

【讨论】:

【参考方案3】:

经过以上测试,我发现将架构定义为user_info: String: String 是一种有效的方法(问题中指定了选项1)。

【讨论】:

我相信这个选项不起作用,因为我实施了这个更改,网络应用程序失败了,所以请参阅@JohnnyHK 的答案【参考方案4】:

您可以在架构中定义对象和数组。你甚至可以将它们结合起来。例如,这是一个对象数组:

var user = new Schema(
    foo: [ 
        address: type: String,
        email: type: String, unique: true
    ],
    bar: [ "simple", "array" ]
);

【讨论】:

我的问题与密钥没有像“地址”这样的简单名称有关,而是密钥是在代码中生成的,但是根据第 2 部分,这是一种有效的方式。我的问题

以上是关于Mongoose 变量键名的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:使用 find() 并将值归因于变量时,save() 不是函数

Mongoose ODM,保存前更改变量

Mongoose ODM,保存前更改变量

如何在 Mongoose/Node 中同时渲染多个变量?

mongoose update操作属性中的变量

尝试将变量保存到 GeoJSON 点时出现 Mongoose CastError