在Jade中迭代Mongoose属性

时间:2011-09-02 11:52:23

标签: node.js mongoose pug

我正在尝试从Mongoose对象输出属性列表,但我也获得了很多Javascript帮助函数。我想知道是否有一种干净的方式来输出我的Mongoose架构属性。

我的Jade显示代码如下:

h4 Legacy data
ul
- each val, key in d.old
    li= key + ": " + val

我的Mongoose架构定义是

Entry = new Schema({
    old : {
        submitter : String,
        table     : String,
        wordid    : Number
    }
});

但是当呈现页面时,会有许多其他Javascript属性和函数同时被输出。 e.g。

_scope: [object Object]
toObject: function () { return this.get(path); }
wordid: 2035
...

有没有一种简单的方法来迭代我的架构中的属性? 我可以使用指定的列表,但我想知道是否有更好的方法。

实际上,我该怎么写指定的方式?在红宝石中,我知道我可以做[ 'wordid', 'submitter' ].each但在玉中是否有相同的东西?

2 个答案:

答案 0 :(得分:3)

您遇到了对象的原型属性。您可以使用.hasOwnProperty

过滤掉它们
- each val, key in d.old
- if(d.old.hasOwnProperty(key))
    li= key + ": " + val

答案 1 :(得分:1)

请记住,您还可以在文档(mongoose doc of Document#toJSON)上使用方法toJSON来获取可在模板中使用的干净JSON对象(无需担心mongoose文档的内部和方法)。事实上,您提到的toObject方法类似于toJSON,您可能想要check it out

例如:

doc = EntryModel({old: {submitter: "s", table: "tableS", wordid: "666"}})
console.log(b.toJSON())
// outputs:
{
    "_id": "51fea037434b242816000002",
    "old": {
        "submitter": "s",
        "table": "tableS",
        "wordid": 666
    }
}
// Is a plain JSON object without any other property or method