假设我有一个非常简单的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 不是构造函数。
如何将自定义数据添加到架构中?
答案 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个键,一个数字,一个字符串和一个数组的对象。
我希望这能让你走上正确的道路。