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": "<value>", "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 变量键名的主要内容,如果未能解决你的问题,请参考以下文章