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文档的属性是使用。