我在Jade中遇到了一个非常奇怪的问题,我无法访问Schema中未定义的值。
我在我的架构上使用strict:false
并将值保存到它。我的数据如下:
{
"title" : "This is a title in the schema",
"notInSchema" : "This will never show up"
}
这有效:
h1= post.title
这不起作用:
h1= post.notInSchema
如果我将所有数据转储到模板中,我可以看到两个数据:
pre= JSON.stringify(options,null,'\t') //{"title" : "This is a title in the schema", "notInSchema" : "This will never show up"}
如果我将notInSchema
添加到我的架构中,它会显示出来。如何在不添加的情况下执行此操作?
答案 0 :(得分:1)
不是将原始Mongoose文档传递给Jade,而是传递其序列化版本:
res.render('yourtemplate', {
post : post.toJSON() // .toJSON() is also called by JSON.stringify()
});
我相信Mongoose只为文档中的字段创建访问器。任何其他字段,即使它们存储在数据库中,也不会得到,因此无法直接访问。
documentation似乎暗示了类似的内容:
注意:在您的实例中不存在的实例上设置的任何键/值 无论架构选项如何,都始终忽略架构。
编辑,因为您正在处理结果集,因此需要在其中的每个文档上调用toJSON
。最简单的方法是使用map
(希望我能正确使用CF语法):
res.render "admin",
title : "Admin Dashboard"
results : results
users : results.users.map (user) ->
user.toJSON()
messages: req.flash() || {}
虽然这仍然会使results
'未经处理'。或者,您可以将映射保留在async.series
中的单独步骤中。例如:
Company
.find()
.exec (err,companies)->
next(null,companies.map (company) ->
company.toJSON()
)
或者在您的模板中使用toJSON
来访问您需要访问“unschema”属性的任何对象。
答案 1 :(得分:0)
我用:
model.find({Branch:branch},function (err, docs){
if (err) res.send(err)
res.render('index',
{tree: tree,
articulos: JSON.parse(JSON.stringify(docs))
})})
});