猫鼬地图
Map in Mongoose
本文关键字:地图 更新时间:2023-09-26
我正在尝试在 Mongoose 中创建一个具有映射(对象、关联数组、键值对)的模式,但到目前为止还没有成功。
我的架构的文档必须是这样的:
{
"_id": ObjectId("..."),
"groups"
{
"groupA":
{
"value1": "...",
"value2": "..."
},
"groupB":
{
"value3": "...",
},
"groupC":
{
"value4": "...",
"value5": "...",
},
...
}
}
组作为具有可变键数的对象。我提前不知道这些密钥,因为它将由用户创建。
组中的每个条目都是另一个对象。和以前一样,我不知道键标识符,但我知道值是字符串(或布尔值或数字,无关紧要)。
当然,这些键是字符串。
在猫鼬中甚至有可能(无论如何都有构建这样的模式/模型)吗?
最佳做法是将任何动态数据排除在字段名称之外。此类用例的典型方法是将groups
创建数组,并将组的名称移动到所包含对象的name
字段中。 然后,可以使用 Mixed
类型来包含用户定义的值集:
{
"_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
}]
});
Map 从版本 5.1 开始受支持 -http://mongoosejs.com/docs/schematypes.html#maps
看起来有人做了一个插件,万岁!
https://www.npmjs.com/package/mongoose-map
根据自述文件安装和配置后,您可以执行{groups:[MongooseMap]}...
你有没有试过这样的事情:
var schema = new mongoose.Schema({
groups: [mongoose.Schema.Types.Mixed]
});
参考:猫鼬架构类型
编辑,鉴于我在下面的评论,并重新审视我之前的答案,让我们假设所有值都是字符串类型(我已经知道它们可能是任何东西):
var schema = new mongoose.Schema({
groups:[{
name: String,
values:[String]
}]
});
编辑#2:假设"value1"是一些更有意义的名称的占位符,并假设成员名称的数量是有限的,只要它们不是必需的,那么您可以将它们全部放在您的架构中,因此您应该能够这样做,而不是数组版本:
var schema = new mongoose.Schema({
groups:[{
name: String,
value1: String,
value2: String,
value3: String,
value4: String,
value5: String
}]
});
相关文章:
- 谷歌地图固定位置覆盖
- 不显示带有本地json文件数据的谷歌地图脚本
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 谷歌地图标记不会显示
- 无法在JS中显示谷歌地图
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 需要帮助谷歌地图方向面板在FancyBox中显示
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 在谷歌地图上获取事件的x,y坐标
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 模拟谷歌地图中的点击
- 如何知道哪个标记被谷歌地图点击了
- 谷歌地图JS API+JSON-多个标记没有显示
- 缓存谷歌地图数据
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 在谷歌地图上绘制位置数据库
- 标记的实时更新,无需加载页面谷歌地图API V3
- 在地图上画一条路线
- 可以't计算自定义谷歌地图的js