地图在mongoose

我试图在Mongoose中创build一个具有映射(对象,关联数组,键值对)的模式,但目前为止没有成功。
我的模式文件必须是这样的:

{ "_id": ObjectId("..."), "groups" { "groupA": { "value1": "...", "value2": "..." }, "groupB": { "value3": "...", }, "groupC": { "value4": "...", "value5": "...", }, ... } } 

作为具有可变数目的键的对象。 提前不知道这些密钥,因为它将由用户创build。
组中的每个条目都是另一个对象。 和以前一样,我不知道关键标识符,但是我知道这些值是String (或者Boolean,或者Number,没关系)。
当然,这些键是string

在Mongoose中甚至有可能(是否有build立这样的模式/模型)?

最佳做法是将任何dynamic数据保留在字段名称之外。 像这样的用例的典型方法是将groups作为一个数组,并将组的name移动到所包含对象的name字段中。 然后,您可以使用“ Mixedtypes来包含用户定义的一组值:

 { "_id": ObjectId("..."), "groups": [ { name: "groupA", values: { "value1": "...", "value2": "..." } }, { name: "groupB", values: { "value3": "..." } }, { name: "groupC", values: { "value4": "...", "value5": "..." } }, ... ] } 

您可以将模式定义为:

 var schema = new Schema({ groups: [{ name: String, values: Schema.Types.Mixed }] }); 

看起来像有人做了一个插件,万岁!

https://www.npmjs.com/package/mongoose-map

一旦你根据自述进行安装和configuration,你可以做{groups:[MongooseMap]}...

你有没有尝试过这样的事情:

 var schema = new mongoose.Schema({ groups: [mongoose.Schema.Types.Mixed] }); 

参考: mongoose模式types

编辑,给我下面的评论,并在我之前的答案,riffing,让我们假设所有的值是stringtypes(我已经明白,他们可能是任何东西):

 var schema = new mongoose.Schema({ groups:[{ name: String, values:[String] }] }); 

编辑#2:假设“value1”是一个更有意义的名称的占位符,并假定成员名称的数量是有限的,只要它们不是必需的,那么你可以把它们全部放在你的模式中,而不是arrays版本,你应该可以这样做:

 var schema = new mongoose.Schema({ groups:[{ name: String, value1: String, value2: String, value3: String, value4: String, value5: String }] });