は現在、私はすべてのPage
の文書で使用されているすべてのTag
文書を検索し、occurrences
の数をカウントし、各Tag
文書にそれらを添付この機能は戻ってきた:集計を使用して、そのメソッドから返されていないドキュメントも含めるにはどうすればよいですか?
exports.getAll = (req, res, next) => {
const config = utils.prepareOptions(req.query);
async.waterfall([
(done) => {
Tag.count({}).exec((err, total) => {
return done(err, total);
});
}
], (err, total) => {
Page.aggregate([
// {
// $unwind: "$tags"
// },
{
$group: {
_id: "$tags",
occurrences: {
$sum: 1
}
}
},
{
$lookup: {
from: "tags",
localField: "_id", // this is supposely wrong but I can't prove it
foreignField: "_id",
as: "tagsData"
}
},
{
$unwind: "$tagsData"
},
{
$match: {
"tagsData.label": new RegExp(config.query, 'i')
}
},
{
$project: {
occurrences: "$occurrences",
tagData: '$tagsData'
}
},
{
$addFields: {
"tagData._id": "$_id",
"tagData.occurrences": "$occurrences"
}
},
{
$replaceRoot: {
newRoot: "$tagData"
}
},
{$sort: {[config.sortBy]: config.order}},
{$limit: config.limit},
{$skip: config.offset}
], (err, tags) => {
console.log(tags);
console.log(err);
console.log(total);
if (err) {
return next(err);
}
res.json({
error: null,
data: tags,
total: total,
results: tags.length
});
});
});
};
これに伴う問題はTag
にはないということです任意の時点で必ずPage
と一緒に使用する必要があります。使用されていないTag
が返されないため、この関数を呼び出すときに問題が発生します。
私がする必要があるのは、使用されていないTag
もすべて含めて、occurrences: 0
に設定することです。
[
{_id: 1203f8sad9sf, label: 'Tag 1'},
{_id: 1203asdf89sf, label: 'Tag 2'},
{_id: 1203asqw89sf, label: 'Tag 3'}
]
そしてPage
文書:私は3枚のTag
書類がある場合
だから
{
_id: 90182312,
tags: [ObjectId(1203f8sad9sf), Object(1203asdf89sf)]
}
そしてTag 1
とTag 2
を私も返さないか、Page
のtags
配列の一部でありますTag 3
aggregate
メソッドから返されたtags
に含まれるようにしますか?
私はこの質問を投稿して以来、私はすべての種類の巻き戻しとたわごとをしてきました。そして、私がしなければならなかったのは、このLOLでした。あなたは男です。 – Chrillewoodz
大歓迎です! – dnickless