Node.js 为什么通过Mongoose对象循环显示元数据?
为什么通过带有NUNJUCK的mongoose对象循环显示元数据 我正在编写的应用程序中使用mongodb和nunjucks 我试图遍历一个名为Node.js 为什么通过Mongoose对象循环显示元数据?,node.js,mongodb,mongoose,nunjucks,Node.js,Mongodb,Mongoose,Nunjucks,为什么通过带有NUNJUCK的mongoose对象循环显示元数据 我正在编写的应用程序中使用mongodb和nunjucks 我试图遍历一个名为persona的模型,但这样做会显示与记录相关的mongoose元数据 如果我只是通过编写{{persona}来显示persona变量 我的输出如下。只有在我的模式中定义的键/值 { _id: 582f186df1f05603132090d5, name: 'Alex', name_lower: 'alex', __v: 0, meta: { vali
persona
的模型,但这样做会显示与记录相关的mongoose元数据
如果我只是通过编写{{persona}
来显示persona
变量
我的输出如下。只有在我的模式中定义的键/值
{ _id: 582f186df1f05603132090d5, name: 'Alex', name_lower: 'alex', __v: 0,
meta: { validated: null, contributors: 'Research Team', sources: '4 Interviews' },
pain_points: { points: 'Debugging' },
ideal_day: { responsibilities: 'Coding websites.', goals: 'Finish the research site.', joys: 'Good code, Good food.', hobbies: 'Dance, Hiking, Eating' },
environment: { workspace: 'Desk', tools: 'Atom, Sketch', info_from: null, info_to: null, coworkers_relationship: null, technology_relationship: null },
basic_info: { jobtitle: 'FED', experience: '2', education: 'CS', company: '' } }
但是,如果我在角色中循环
{% for name, item in persona %}
{{ name }} : {{ item }}
{% endfor %}
{%代表名称,项目位于角色%}
{{name}}:{{item}
{%endfor%}
除了在我的模式中显示键外,还将显示与记录关联的所有mongoose元数据。我想了解为什么在对象上循环时会显示不同的信息
$__
isNew
errors
_doc
$__original_save
save
_pres
_posts
$__original_validate
validate
$__original_remove
remove
db
discriminators
__v
id
_id
meta
pain_points
ideal_day
environment
basic_info
updated_at
created_at
name_lower
name
schema
collection
$__handleSave
$__save
$__delta
$__version
increment
$__where
$__
是新的
错误
_医生
$\u原始\u保存
拯救
_压力
_职位
$\uu原始\u验证
验证
$\uu原始\u删除
去除
分贝
鉴别器
__五
身份证件
_身份证
元
痛点
理想日
环境
基本信息
更新地址
创建于
姓名较低
名称
模式
收集
$\uu handleSave
$\u保存
$\uu三角洲
$\u版本
增量
$\u在哪里
我通过使用Mongoose的lean()
解决了这个问题,但仍然不明白我为什么会经历这种行为。当您调用{{persona}}
时,结果是persona.toString()
如果对象没有覆盖方法toString
,则结果将是[object object]
(默认情况下toString
方法)。
当您使用loop{%作为键时,persona%}中的值
则等于
for(var key in obj)
print(key + ' - ' + obj[key]);
此代码打印所有对象属性和方法
要排除方法,必须使用下一个循环
for(var key in obj)
if (typeof(obj) != 'function') // or obj.hasOwnProperty(key)
print(key + ' ' + obj[key]);
因此,为了避免出现问题,您必须在将数据传递到Nunjuck或输出之前“清除”数据。
您可以定义自定义过滤器
var env = nunjucks.configure(...
env.addFilter('lean', function(obj) {
var res = {};
for(var key in obj)
if (typeof(obj) != 'function') // or obj.hasOwnProperty(key)
res[key] = obj[key];
return res;
});
...
{% for key, value in persona | lean %}
{{key}} - {{value}}
{% endfor %}