我在发票架构中有一个嵌套的项目架构,如下所示:
var InvoiceSchema = new db.Schema({
title: {
type: String,
required: true
},
description: String,
clientId: db.Schema.ObjectId,
companyId: db.Schema.ObjectId,
poNumber: Number,
invoiceNumber: {
type: Number,
default: 1000
},
taxApplied: {
type: Boolean,
default: false
},
feeApplied: {
type: Boolean,
default: false
},
lastUpdated: {
type: Date,
default: Date.now
},
createdOn: {
type: Date,
default: Date.now
},
status: {
type: String,
enum: ['presented', 'entered', 'hold', 'paid',
'partially paid', 'reversed', 'void'],
required: true
},
invoiceItems: [InvoiceItemSchema]
});
var InvoiceItemSchema = new db.Schema({
invoiceId: {
type: db.Schema.ObjectId,
required: true
},
description: String,
qty: Number,
rate: Number,
isFlatFee: {
type: Boolean,
default: false
}
});
我可以创建一个新的invoiceItem并将其直接推送到invoice invoiceItems数组中,并在其中读取它,但我在尝试更新和删除时遇到了很多麻烦。我在这里看这个网站
http://tech-blog.maddyzone.com/node/add-update-delete-object-array-schema-mongoosemongodb
但我似乎无法将其中任何一种工作。
我知道在那篇博客中他使用 $ set 来更新内容,但看起来它只更新了一个字段,我想根据用户输入而不是硬编码字段更新任何字段。我现在没有任何代码可以展示,因为我很遗憾但是会得到一些帮助!
答案 0 :(得分:0)
如果您对InvoiceItem中的发票有提及,则您不应该将项目保存在发票的列表中。如果你想获得该列表,你可以简单地进行如下查询:
InvoiceItem.find({invoiceId: invoiceId}, function(err, items) {
...
})
现在这将使更新变得更加容易,因为您只需更新每个InvoiceItem对象并保留对Invoice的引用。
希望这能帮到你。