Node.js 向从Mongoose模式派生的模型添加字段
我有一个猫鼬模式,如下所示:Node.js 向从Mongoose模式派生的模型添加字段,node.js,mongodb,mongoose,schema,Node.js,Mongodb,Mongoose,Schema,我有一个猫鼬模式,如下所示: ManifestSchema = new Schema({ entries: [{ order_id: String, line_item: {}, // <-- resolved at run time address: {},// <-- resolved at run time added_at: Number, stop: Nu
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 });
我面临的问题是,如果不在模式中定义address和line_item,当我在运行时解析它们时,它们不会返回给用户,因为它们不在模式中…因此我添加了它们…这导致了另一个不必要的行为:当我将对象保存回时,address和line_item都与manifest对象一起保存,我想避免的事情
是否仍然可以在运行时将字段添加到架构中,但在返回时不保存字段
我试图在mongoose中使用“virtuals”,但它们确实提供了我所需要的,因为我没有从模式创建模型,但它是从数据库返回的。调用您的清单
Mongoose实例创建一个普通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;
})
调用您的manifest
Mongoose实例创建一个普通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;
})
太棒了,谢谢!你知道为什么这样做的细节吗?是什么让mongoose返回的实体不同于“普通javascript”对象?@DanielFlippance一个关键区别是mongoose文档的属性是使用定义的。非常感谢!你知道为什么这样做的细节吗?是什么让mongoose返回的实体不同于“普通javascript”对象?@DanielFlippance一个关键区别是mongoose文档的属性是使用。