gpt4 book ai didi

node.js - 为什么通过 Mongoose 对象循环显示元数据?

转载 作者:可可西里 更新时间:2023-11-01 10:02:46 42 4
gpt4 key购买 nike

为什么使用 nunjucks 循环遍历 mongoose 对象会显示元数据?

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

我正在尝试遍历一个名为 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: '' } }

但是,如果我遍历 persona

    {% for name, item in persona %}        {{ 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

我能够使用 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]);

因此,为避免出现问题,您必须在将数据传递给 nunjucks 或输出之前“清除”数据。
你可以定义 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 %}

关于node.js - 为什么通过 Mongoose 对象循环显示元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683140/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com