将字段添加到从Mongoose模式派生的模型中

时间:2014-10-17 19:52:52

标签: node.js mongodb mongoose schema

我有一个Mongoose架构,如下所示:

ManifestSchema = new Schema({
entries: [{
            order_id: String,
            line_item: {}, // <-- resolved at run time
            address: {},// <-- resolved at run time
            added_at: Number,
            stop: Number,

        }]

}, {collection: 'manifests', strict: true });

在代码的某处我有这个:

Q.ninvoke(Manifests.findById(req.params.id), 'exec')
.then(function(manifest)
{
// ... so many things, like resolving the address and the item information
entry.line_item = item;
entry.address = order.delivery.address;
})

我遇到的问题是,如果没有在架构中定义address和line_item,当我在运行时解决它们时,它们就不会返回给用户,因为它们不在架构中......所以我添加了它们......这导致了另一个不需要的行为:当我保存对象时,地址和line_item都与清单对象一起保存,这是我想避免的。

无论如何都要在运行时启用向架构添加字段,但是还没有在回来的路上保存它们?

我试图使用&#39;虚拟&#39;在mongoose中,但它们确实提供了我需要的东西,因为我不是从模式创建模型,而是从数据库中返回。

1 个答案:

答案 0 :(得分:4)

manifest Mongoose实例上调用toObject()以创建纯JavaScript副本,您可以为用户响应添加额外字段,而不会影响您需要保存的文档:

Q.ninvoke(Manifests.findById(req.params.id), 'exec')
.then(function(manifest)
{
  var manifestResponse = manifest.toObject();

  // ... so many things, like resolving the address and the item information
  entry.line_item = item;
  entry.address = order.delivery.address;
})