8

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

例如

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

上面的id_value_*s 是用户会话 ID,因此是一长串随机字符。我怎样才能mongoose Schema为此创建一个?

  1. user_info: {String, String}工作吗?

  2. 我可以对其进行重组,使其成为user_info一个对象数组{ "sessionid": "<value>", "value: "y"},这没关系,这是最好的选择吗?

4

4 回答 4

11

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

user_info: [{sessionid: String, value: String}]

您可以使用$位置运算符来更新单个user_info数组元素sessionid

于 2013-01-07T13:56:25.663 回答
4

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

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

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

你可以在这里阅读更多关于它的信息

于 2014-11-04T22:34:41.987 回答
1

在测试了上述内容之后,我发现将架构定义为user_info: { String: String }是一种有效的方法(问题中指定了选项 1)。

于 2013-01-07T12:30:35.673 回答
0

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

var user = new Schema({
    foo: [ {
        address: {type: String},
        email: {type: String, unique: true}
    }],
    bar: [ "simple", "array" ]
});
于 2013-01-07T13:12:00.927 回答