我欣賞一些幫助。我正在用express和mongodb(v3.4.4)做一個api rest,使用貓鼬(v4.10.5)。我需要做一個聚合操作,但我沒有處理它。我給你看一些代碼。該模型(它有更多的屬性,但我已經離開它簡單):如何使聚合+填充貓鼬
const CategoryModel = mongoose.model('Category', new Schema({
slug: { type: String, unique: true, lowercase: true, index: true },
description: String
}));
const MyModel = mongoose.model('MyModel', new Schema({
category: { type: Schema.Types.ObjectId, ref: 'Category' },
other: [{ type: Schema.Types.ObjectId, ref: 'Other' }],
times_count: { type: Number, default: 0 }
}));
重要的是,我很感興趣的MyModel
填入category
場,不other
場。
假設Category
和MyModel
具有良好的記錄。請求:
MyModel.aggregate([
{
$group : {
_id : '$_id',
times: { $sum: '$times_count' }
}
},
{
$limit: 5
}
]).limit(5).exec().then((data) => {
console.log(data);
}).catch((err) => {
console.error(err);
});
data
是正確的,有5條記錄,但不包括category
。現在,我試着用:
MyModel.aggregate([
{
$group : {
_id : '$_id',
times: { $sum: '$times_count' }
}
},
{
$limit: 5
},
{
$lookup: {
from: 'Category', // I tried with 'Categories' and 'categories'
localField: 'category',
foreignField: '_id',
as: 'category'
}
},
{
$unwind: '$category'
}
]).limit(5).exec().then((data) => {
console.log(data);
}).catch((err) => {
console.error(err);
});
現在data
是空的。我設置了mongoose.set('debug', true);
以及它們看起來正確的操作,包括最後的操作aggregate
,但是數據是空的...
我不知道我是否解釋得很好。顯然有一些我不完全理解。提前致謝。
謝謝,但不工作。我試着用'from:'Category'','localField:'category''和其他組合,我在數組中包含'$ limit',並且沒有'$ unwind' ......總之,有幾十個組合。另外,爲什麼需要光標?我不明白。請注意,我要填充的字段是「MyModel」的「類別」,而不是「_id」。再次感謝。 – lmfresneda
@LuisMiguelF。啊,你說得對,它應該是'category'。你不應該需要'cursor()'如我的例子所示。我還會設置[debug on](http://mongoosejs.com/docs/faq.html#enable_debugging)來查看任何查詢。用類別模式編輯您的問題。你是否也在運行MongoDB v3.2或更高版本? – Mikey
對不起@Mikey,光標是我的錯,我在這個測試中用Mockgoose代替Mongoose(儘管我不知道爲什麼Mockgoose需要一個遊標)。現在,我只使用貓鼬,我會編輯我的問題。還是不行... :( – lmfresneda