我从mongo检索子文档时遇到问题。
第一级值是可访问且正确的,但数组下的对象则不可。
这是具有的猫鼬模型:
const Player = mongoose.model('Player', new mongoose.Schema({
uid: {type: String, required:true},
name: {type:String, required: true, unique: true},
gems: {type: Number, default: 1100},
avatarName: {type: String, default: 'whiteMan_blackHair_5'},
miniGamesInfo: [new mongoose.Schema({
title: {type: String, required: true },
bestRecord: {type:Number, default:0 },
//* the value zero (0) represents "undefined". Note that user can't send value zero.
globalRank: {type: Number, default:0 },
isInLeague: {type: Boolean, default: false},
//* the value zero (0) represents "undefined". Note that user can't send value zero.
leagueRank: {type: Number, default:0 },
//* the value zero (-1) represents "not set until now".
stars: {type: Number, default:-1, min:-1, max:5},
perDayTries: {type: Number, default:0, min:0, max:10 }
})]
}));
我使用上述模型将一些玩家信息保存到MongoDB中。 另外,我的路由如下:
router.get('/', async (req, res) => {
const players = await Player.find();
console.log(players);
res.send(players);
});
当客户端尝试获取玩家信息时,服务器将使用以上代码处理请求。客户端将完全而完美地接收JSON对象,并能够使用所有子对象及其字段...
但是,在节点js中,当我在控制台中打印对象时,我将在下面看到:
[ { gems: 1100,
avatarName: 'whiteMan_blackHair_5',
_id: 5bc0af4137b4423870c93f5c,
avatarNumber: 12,
uid: '239dmc20mc3etc9347x276xs23i',
name: 'Alex',
miniGamesInfo: [ [Object], [Object], [Object], [Object], [Object] ],
__v: 0 },
{ gems: 1100,
avatarName: 'whiteMan_blackHair_5',
_id: 5bfe7f71fd094929344235da,
uid: '239dmc20ft45r434u9i76xs23i',
name: 'ned',
miniGamesInfo: [ [Object], [Object], [Object], [Object], [Object] ],
__v: 0 },
{ gems: 1100,
avatarName: 'whiteWoman_brownHair_4',
_id: 5c0bd484a35b5e3f4473bcfc,
uid: 'bd2972097e51a665d80bcea4fc0d3145ddd4251c',
name: 'Peter',
miniGamesInfo: [ [Object], [Object], [Object], [Object], [Object] ],
__v: 0 } ]
“ miniGamesInfo”数组中的所有“ miniGameInfo”对象在节点中都难以理解。 以及当我尝试访问如下子字段时:
console.log(players[0].miniGamesInfo[0].name);
控制台将显示“未定义”。 当我尝试仅从播放器对象(不是全部)中检索某些属性时,几乎会发生相同的问题。诸如“名称”之类的字段将正确检索,但诸如“标题”或“ bestRecord”之类的某些子值返回错误。例如此代码:
const players = await Player.find({}, {name: 1, 'miniGamesInfo.title': 1});
console.log(players);
将在控制台中返回:
[ { _id: 5bc0af4137b4423870c93f5c,
name: 'Alex',
miniGamesInfo: [ [Object], [Object], [Object], [Object], [Object] ] },
{ _id: 5bfe7f71fd094929344235da,
name: 'ned',
miniGamesInfo: [ [Object], [Object], [Object], [Object], [Object] ] },
{ _id: 5c0bd484a35b5e3f4473bcfc,
name: 'Peter',
miniGamesInfo: [ [Object], [Object], [Object], [Object], [Object] ] } ]
它将正确的JSON数据返回给客户端:
[
{
"_id": "5bc0af4137b4423870c93f5c",
"name": "Alex",
"miniGamesInfo": [
{
"title": "MatchPreviousCard"
},
{
"title": "RememberTiles"
},
{
"title": "WhichOneIsBigger"
},
{
"title": "CountTaxies"
},
{
"title": "WhatWasDeleted"
}
]
},
{
"_id": "5bfe7f71fd094929344235da",
"name": "ned",
"miniGamesInfo": [
{
"title": "MatchPreviousCard"
},
{
"title": "RememberTiles"
},
{
"title": "WhichOneIsBigger"
},
{
"title": "CountTaxies"
},
{
"title": "WhatWasDeleted"
}
]
},
{
"_id": "5c0bd484a35b5e3f4473bcfc",
"name": "Peter",
"miniGamesInfo": [
{
"title": "MatchPreviousCard"
},
{
"title": "RememberTiles"
},
{
"title": "WhichOneIsBigger"
},
{
"title": "CountTaxies"
},
{
"title": "WhatWasDeleted"
}
]
}
]
我有点困惑。但是我想问题出在NODE JS解析数据的方式上。
请帮助。我坚持了4天。