[英]How filter sub sub document in MongoDB
您好,我正在使用完整的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做到這一點?
這在mongodb中很重要,mongodb中的聚合是解決此問題的正確方法。 您需要先展開供應商數組,然后展開類別數組,然后使用$ 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', ...})
它將首先展開供應商數組,然后展開類別數組
但是,由於您還使用貓鼬,因此可以使用純JavaScript。 您可以獲取所有費用,然后遍歷所有費用並獲得結果
Expense.find().then(function(expenses) {
expenses.forEach(function(suppliers){
suppliers.forEach
...
})
})
盡管這種javascript方式會增加單線程環境(node js)的工作量,但對於某些典型的mongodb查詢仍然很方便
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.