2016-01-23 49 views
0

我有一个模型Player,包含一个slug字符串,name字符串和nickname数组。在昵称数组中,我将存储nickname模型。我创建了一个名字和一个slu player的球员,然后我创建了每个nickname模型,并将它们推到player.nickname。然后我保存player并将其作为回调结果返回。不能打印属性 - Mongoose

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

{ 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: 

我在做什么错了?

+2

player.player_nickname不应该存在。 player.nickname应该。 – chriskelly

+0

@ chriskelly你是对的。然而,这次控制台记录“未定义”。 – user3616495

+0

看到下面的答案:) – chriskelly

回答

0

从你写的,昵称包含一个未分析的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); 
}); 
-1

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

{

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

应该

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

您不能通过删除引号将json字符串转换为对象。使用JSON.parse,正如我在我的回答中已经解释的 – chriskelly

+0

对不起,我正在考虑将数据存储为对象而不是字符串。 '{_id:56a35c2b33a41a8c187efd08,昵称:'Slats',__v:0}'。所以你实际上不必解析json。看看json字符串,在存储之前他将对象转换为字符串'JSON.stringify(obj)'。 @chriskelly –

+0

您的解决方案绝对正确。但它不是解决问题的唯一方法,对吗? @ chriskelly –