地图在猫鼬

Nem*_*ein 6 javascript mongoose mongodb node.js

我正在尝试在Mongoose中创建一个具有映射(对象,关联数组,键值对)的模式,但到目前为止还没有成功.
我的架构的文档必须是这样的:

{
    "_id": ObjectId("..."),
    "groups"
    {
        "groupA":
        {
            "value1": "...",
            "value2": "..."
        },
        "groupB":
        {
            "value3": "...",
        },
        "groupC":
        {
            "value4": "...",
            "value5": "...",
        },
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

groups是具有可变数量的键的对象.我不提前知道这些密钥,因为它将由用户创建.
组中的每个条目都是另一个对象.和以前一样,我不知道密钥标识符,但我知道值是String(或布尔值,或者数字,无关紧要).
当然,这些键是字符串.

在Mongoose中甚至可能(无论如何构建这样的模式/模型)?

Joh*_*yHK 7

最佳做法是将任何动态数据保留在字段名称之外.像这样的用例的典型方法是创建groups一个数组并将组的名称移动到name包含对象的字段中.然后,您可以使用该Mixed类型包含用户定义的值集:

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

您将架构定义为:

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


o.z*_*o.z 5

从5.1版开始支持地图-http: //mongoosejs.com/docs/schematypes.html#maps