为什么要通过一个Mongoose对象显示元数据?

为什么在nunjucks中通过一个mongoose对象循环显示元数据?

我正在使用我正在编写的应用程序中使用mongodb和nunjucks。

我正在尝试遍历一个名为persona的模型,但这样做会显示与该logging关联的mongoose元数据。

如果我只是通过写{{persona}}来显示personavariables。

我的输出如下。 只是在我的模式中定义的键/值。

 { _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: '' } } 

但是,如果我循环通过persona


     {%名称,人物%%}
         {{name}}:{{item}}
     {%endfor%}

除了在我的模式中显示键之外,还将显示与logging相关联的所有mongoose元数据。 我想了解为什么当我循环对象时显示不同的信息。


     $ __
    是新的
    错误
     _doc
     $ __ original_save
    保存
     _pres
     _posts
     $ __ original_validate
    validation
     $ __ original_remove
    去掉
     D b
    鉴别
     __v
     ID
     _ID
    元
    痛点
     ideal_day
    环境
    基本信息
    的updated_at
     created_at
     name_lower
    名称
    模式
    采集
     $ __ handleSave
     $ __保存
     $ __三angular洲
     $ __版本
    增量
     $ __哪里

我能够通过使用Mongoose的lean()来解决这个问题,但仍然不明白为什么我经历了这种行为。

当你调用{{persona}}结果是persona.toString()
如果对象不具有重写方法toString则结果将是[Object object] (默认为toString方法)。

当你使用循环{% for key, value in 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或输出之前。
你可以做定义custom filter

 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 %}