【发布时间】:2017-12-12 19:28:00
【问题描述】:
我正在使用 Node.js 循环遍历从 Mongoose 获得的 Artist 结果数组:
User.find({UserType: "Artist"}, '_id Firstname BIO list_artworks').then((artists) =>{
for (var i=0; i < artists.length; i++){
console.log(artists[i]);
}
})
上面的代码可以找到并打印出我要求的 Artists 的所有三个属性。
编辑:这是我在控制台中看到的示例:
{
_id: 'T8fdSmf0e1ua',
BIO: 'This is Susan's bio...\n',
Firstname: 'Susan',
list_artworks: [
'ID ONE',
'ID TWO',
...
]
}
但是,当我尝试访问由 Artwork id 组成的数组的属性时,使用 console.log() 未定义所有内容:
for (var i=0; i < artists.length; i++){
console.log(artists[i].list_artworks);
}
当我访问我的 Artist 的其他属性时,例如 BIO 或 Firstname,它会成功打印到我的控制台:
for (var i=0; i < artists.length; i++){
console.log(artists[i].BIO);
}
为什么会这样?我认为在这种情况下它与异步代码无关,因为所有对象都返回到 then() 链中。如果我打印整个 artist 对象,则 list_artworks 属性显然存在,但为什么当我尝试访问它时它未定义?
这是另一个例子。我打印出每个属性,然后是对象本身:
console.log(artist.BIO);
console.log("---------------")
console.log(artist.Firstname);
console.log("---------------")
console.log(artist.list_artworks);
console.log("---------------")
console.log(artist)
这是我的控制台上打印的内容:
---------------
Mike
---------------
undefined // <--- when I access the property itself
---------------
{
_id: '599asdsdasd232d23d2',
Firstname: 'Mike',
BIO: '',
list_artworks: // <-- why does it show up here?
[ '6cohpx7d23asu',
'W4Fgs23X5aXds',...
这是我的整个代码库:
setTimeout(function(){
User.find({UserType: "Artist"}, '_id Firstname BIO list_artworks').then((artists) =>{
console.log(artists.length);
for (var i=0; i < artists.length; i++){
artist = artists[i];
console.log(artist.BIO);
console.log("---------------")
console.log(artist.Firstname);
console.log("---------------")
console.log(artist['list_artworks']);
console.log("---------------")
console.log(artist)
}
}
).catch((err)=>{console.log(err)});
}, constants.NLP_TRAINING_INTERVAL);
【问题讨论】:
-
您确定您从 MongoDB 获取的所有对象都有
list_artworks键吗? -
@SeanParsons 是的。我编辑了我的问题以包含我的 console.log。我的沙盒数据库中只有三个 Artists 对象,它们都有那个键。
-
奇怪的是输出以
----------开头,因为这不是您打印的第一件事...... -
@trincot 那是因为 Mike 的 BIO 是空的,所以它确实打印了那行。就在 StackOverflow 格式化我的输出时,它会切断该文本,因为它是空的。
-
是否有任何其他代码可以稍后添加
list_artwork属性?
标签: javascript node.js mongoose