猫鼬可变密钥名(Mongoose variable key name)

2019-07-17 22:02发布

我有一个mongo对象,并希望通过访问它的mongoose对我的web应用。 我已经定义的模式具有一个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"}这将是好的,这是最好的选择?

Answer 1:

如果您避免在您的架构动态密钥,并用你的第二个想法去你会好起来的:

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

您可以使用$位置运营商更新个别user_info由数组元素sessionid



Answer 2:

你可以用混合像这样架构类型尝试

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

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

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



Answer 3:

测试上面后,我发现,定义模式为user_info: { String: String }是这样做(在问题指定的选项1)有效的方式。



Answer 4:

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

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


文章来源: Mongoose variable key name