从mongodb检索的子对象不是JavaScript对象吗?

时间:2018-12-19 12:32:35

标签: javascript node.js mongodb mongoose

我从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天。

0 个答案:

没有答案