0

我在 Jade 中有一个非常奇怪的问题,我无法访问架构中未定义的值。

我正在使用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到我的架构中,它会显示出来。我怎么能做到这一点而不添加它?

4

2 回答 2

1

不要将原始 Mongoose 文档传递给 Jade,而是传递其序列化版本:

res.render('yourtemplate', {
  post : post.toJSON() // .toJSON() is also called by JSON.stringify()
});

我相信 Mongoose 只会在文档上为模式中的字段创建访问器。任何其他字段,即使它们存储在数据库中,也没有得到,因此无法直接访问。

文档似乎提出了类似的建议:

注意:无论模式选项如何,始终忽略在您的模式中不存在的实例上设置的任何键/值。

编辑:由于您正在处理结果集,因此您需要调用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在您的模板中使用您需要访问这些“非架构”属性的任何对象。

于 2013-05-20T19:48:15.243 回答
0

我用:

model.find({Branch:branch},function (err, docs){
if (err) res.send(err)

 res.render('index', 
    {tree: tree,
      articulos: JSON.parse(JSON.stringify(docs)) 
    })})
   });
于 2014-02-18T21:48:12.507 回答