私はいくつかの助けを感謝します。私はmongoose(v4.10.5)を使って、expressとmongodb(v3.4.4)でapi restをやっています。私は集約操作を行う必要がありますが、私はそれを処理しません。私はあなたにいくつかのコードを示します。モデル(それはより多くの特性を有しているが、私は単純にそれを残した):モンゴースで集計+母集団を作る方法
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'を入れました。また、なぜカーソルが必要ですか?わかりません。注目したいフィールドは '_id'ではなく' MyModel'の 'category'です。再度、感謝します。 @ LuisMiguelF。 – lmfresneda
ああ、あなたはそれが「カテゴリー」でなければならないのは間違いありません。私の例のように 'cursor()'は必要ありません。また、[debug on](http://mongoosejs.com/docs/faq.html#enable_debugging)を設定してクエリを確認します。カテゴリスキーマで質問を編集します。 MongoDB v3.2以降も実行していますか? – Mikey
申し訳ありません@Mikey、カーソルは私のせいですが、私はMockgooseの代わりにMongooseを使っています(なぜMockgooseにカーソルが必要なのかわかりませんが)。今、私はモンゴースのみを使用し、私は私の質問を編集します。まだ動作していない... :( – lmfresneda