如何将自定义数据添加到mongoose模式?

时间:2018-01-03 03:10:14

标签: node.js mongodb mongoose mongoose-schema

假设我有一个非常简单的Schema:

const PlayerSchema = new Schema({
    Region: {type: String},
    Tier: {type: String},
    Division: {type: String}
});

进一步假设PlayerSchema存在于MongoDB集合中,其中 GET 请求“ / players ”返回集合中所有玩家的列表:< / p>

router.get("/players", function(req, res){
    DbSchemas.PlayerSchema.find({}).then(function(players){
       res.send(players);
    });
});

这是我将 GET 请求转换为“ / players ”后的响应:

[
    {
        "Region": "North America",
        "Tier": "Gold",
        "Division": "III"
    },
    {
        "Region": "Asia",
        "Tier": "Platnium",
        "Division": "IV"
    }
]

但是,现在假设我想向PlayerSchema中添加一些不在数据库中的自定义数据。我希望返回的结果是这样的:

  [
     "code": 200,
     "status": "OK",
     "data": {
     {
        "Region": "North America",
        "Tier": "Gold",
        "Division": "III"
    },
    {
        "Region": "Asia",
        "Tier": "Platnium",
        "Division": "IV"
    }
]

基本上,我仍然希望MongoDB集合只存储PlayerSchema(没有代码和状态),我想附加 代码:200 状态:确定 我自己。

这是我尝试过的。它不起作用。我首先创建另一个模式:

const PlayerDataSchema = new Schema({
    code: {type: Number},
    status: {type: String},
    data: {
        type: [PlayerSchema]
    }
});

然后,我尝试使用构造函数创建一个PlayerDataSchema实例,并将PlayerSchema对象分配给PlayerDataSchema。

router.get("/players", function(req, res){
DbSchemas.PlayerSchema.find({}).then(function(players){
   var PlayerData = new DbSchemas.PlayerDataSchema({ ResponseCode:200 }, { ResponseStatus:"OK" }, {Players: players});
   res.send(PlayerData);
});

});

这不起作用,只是给了我一个 TypeError:DBSchemas.PlayerDataSchema 不是构造函数。

如何将自定义数据添加到架构中?

1 个答案:

答案 0 :(得分:1)

您无需修改​​架构即可向响应中添加字段。

您想要的输出无效json:

  [
     "code": 200,
     "status": "OK",
     "data": {
     {
        "Region": "North America",
        "Tier": "Gold",
        "Division": "III"
    },
    {
        "Region": "Asia",
        "Tier": "Platnium",
        "Division": "IV"
    }
]

数组包含对象,你正在放入密钥对。这是行不通的。

那就是说,你只需要接受响应并用javascript操作它就可以满足你的需要。

例如,如果您检索的数据是此数组:

players = [
    {
        "Region": "North America",
        "Tier": "Gold",
        "Division": "III"
    },
    {
        "Region": "Asia",
        "Tier": "Platnium",
        "Division": "IV"
    }
]

你可以让另一个对象像这样返回:

result = {
    code: 200,
    status: "OK",
    data: players
};

所以你的回报价值是:

{
    code: 200,
    status: "OK",
    data:     [
        {
            "Region": "North America",
            "Tier": "Gold",
            "Division": "III"
        },
        {
            "Region": "Asia",
            "Tier": "Platnium",
            "Division": "IV"
        }
    ]

};

这是一个包含3个键,一个数字,一个字符串和一个数组的对象。

我希望这能让你走上正确的道路。