【问题标题】:Can't print property in array - Mongoose无法在数组中打印属性 - Mongoose
【发布时间】:2016-01-23 10:56:12
【问题描述】:

我有一个模型Player,包含一个slug 字符串、name 字符串和nickname 数组。在昵称数组中,我将存储nickname 模型。我创建了一个带有名称和 slug 的播放器,然后我一个一个地创建每个 nickname 模型并将它们推送到 player.nickname。然后我保存player 并将其作为回调结果返回。

当我将它打印到控制台时,它是这样的:

{ name: 'Max Zaslofsky',
  nickname: ["{ _id: 56a35c2b33a41a8c187efd08, nickname: 'Slats', __v: 0 }"] }

然后我尝试打印它的名字和昵称:

    let player = results.findRandomPlayer;
    let nicknames = player.player_nickname;
    console.log("Player is", player.name);
    console.log("His nickname is:");
    _.forEach(nicknames, function (nickname) {
        console.log(nickname.nickname);
    });

但它会打印到控制台:

Player is  Max Zaslofsky
His nickname is:

我做错了什么?

【问题讨论】:

  • player.player_nickname 不应该存在。 player.nickname 应该。
  • @chriskelly 你是对的。但是,这次控制台记录了undefined
  • 将昵称存储为对象。请参阅下面的答案。但我不明白为什么对答案投了反对票,有人可以解释一下吗?

标签: javascript arrays node.js mongodb


【解决方案1】:

根据您所写的内容,昵称包含一个未解析的 json 对象字符串数组。

您的代码应如下所示:

let player = results.findRandomPlayer(); // invoke function!
let nicknames = player.nickname; // use correct propertyname

console.log("Player is", player.name);
console.log("His nickname is:");

_.forEach(nicknames, function (nickname) {
    // its not an object its an unparsed object
    console.log(JSON.parse(nickname).nickname);
});

【讨论】:

    【解决方案2】:

    在昵称数组中,您推送的是字符串而不是对象。删除双引号" ",我的意思是将昵称存储为对象而不是字符串。你可以使用JSON.parse(nicknameString)

    {

      name: 'Max Zaslofsky',
      nickname: ["{ _id: 56a35c2b33a41a8c187efd08, nickname: 'Slats', __v: 0 }"] }
    

    应该是

    { 
      name: 'Max Zaslofsky',
      nickname: [{ _id: 56a35c2b33a41a8c187efd08, nickname: 'Slats', __v: 0 }]
    }
    

    【讨论】:

    • 您无法通过删除引号将 json 字符串转换为对象。使用我在回答中已经解释过的 JSON.parse
    • 对不起,我正在考虑将数据存储为对象而不是字符串。 { _id: 56a35c2b33a41a8c187efd08, nickname: 'Slats', __v: 0 }。这样您实际上就不必解析 json。查看 json 字符串,在存储之前他将对象转换为字符串 JSON.stringify(obj) 。 @chriskelly
    • 您的解决方案绝对正确。但这不是解决它的唯一方法,对吗? @chriskelly
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2017-09-03
    • 2017-11-28
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多