您好我正在使用完整的Stack' MEAN'我在MongoDB中有一个数据结构,如下所示:
var ExpenseSchema = new Schema({
date: {
type: Date,
default: Date.now,
required: 'Ingrese la fecha del comprobante'
},
supplier: {
type: Schema.ObjectId,
ref: 'Supplier',
},
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
var SupplierSchema = new Schema({
name: {
type: String,
default: '',
required: 'Ingrese la Razon Social del Proveedor',
trim: true
},
category: {
type: Schema.ObjectId,
ref: 'Category',
},
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
var CategorycompraSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Rubrocompra name',
trim: true
},
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
每个'费用'有供应商'每个供应商都有一个'类别'
我需要进行查询,以便过滤所有'费用'在特定类别中。有人可以告诉我如何用MongoDB或mongoose做到这一点?
答案 0 :(得分:0)
这是mongodb中的一个重要案例,mongodb中aggregations是解决这个问题的正确方法。您需要$unwind供应商数组,然后是类别数组,然后使用$ group将其重新组合在一起:
我的解决方案可能因您的要求而异,但您必须这样做:
db.test.aggregate(
{ $match: {...}}, //match query
{ $unwind: '$supplier'},
{ $unwind: '$supplier.category'},
{ $match: {supplier.category.a: ...}}, //match query after unwinding of supplier and category
{ $group: {_id: '$_id', ...})
它将首先展开供应商数组,然后展开类别数组
但是既然你也在使用mongoose,你可以使用纯JavaScript。您可以获取所有费用,然后循环访问它们 获得你的结果
Expense.find().then(function(expenses) {
expenses.forEach(function(suppliers){
suppliers.forEach
...
})
})
虽然这种javascript方式会增加单线程环境(节点js)的工作量,但它仍然可以用于一些典型的mongodb查询