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

我有一个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; }) 

我面临的问题是,没有在模式中定义地址和line_item,当我在运行时解决它们,他们不会返回给用户,因为他们不在模式…所以我加了他们…这导致我另一个不想要的行为:当我保存对象,地址和line_item保存与清单对象,我想避免的东西。

有没有办法在运行时添加字段到模式,但是,不是在回来的路上保存它们?

我试图在mongoose中使用'虚拟',但他们确实提供我所需要的,因为我不是从模式创build模型,而是从数据库返回。

在您的manifest Mongoose实例上调用toObject()以创build一个普通的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; })