我有一个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中,但它们确实提供了我需要的东西,因为我不是从模式创建模型,而是从数据库中返回。
答案 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;
})