इसे मोंगोडब एग्रीगेशन फ्रेमवर्क के साथ आसानी से किया जा सकता है।
हम $facet का इस्तेमाल करते हैं दस्तावेज़ों की कुल संख्या के साथ पृष्ठांकित डेटा प्राप्त करने के लिए एकत्रीकरण।
एकत्रीकरण ढांचे में हम $lookup का उपयोग करते हैं नेवले के बजाय आबाद। $lookup एक सरणी देता है, सरणी में पहला आइटम प्राप्त करने के लिए हम $ का उपयोग करते हैं। arrayElemAt $addFields के अंदर ऑपरेटर ।
और यहां आपके ऐप पर लागू करने के लिए कोड है:(पहला $ मैच एकत्रीकरण यहां अनावश्यक है, लेकिन अगर आपको भविष्य में इसकी आवश्यकता हो तो मैं इसे डालता हूं)
exports.getPosts = async (req, res, next) => {
const perPage = 5;
const currPage = req.query.page ? parseInt(req.query.page) : 1;
const skip = (currPage - 1) * perPage;
try {
const result = await Post.aggregate([{
$match: {},
},
{
$sort: {
created_at: -1,
},
},
{
$lookup: {
from: "categories",
localField: "category",
foreignField: "_id",
as: "category",
},
},
{
$addFields: {
category: {
$arrayElemAt: ["$category", 0],
},
},
},
{
$facet: {
totalRecords: [{
$count: "total",
}, ],
data: [{
$skip: skip,
},
{
$limit: perPage,
},
],
},
},
]);
let postsCount = result[0].totalRecords[0].total;
const pageCount = Math.ceil(postsCount / perPage);
const pageDecrement = currPage > 1 ? 1 : 0;
const pageIncrement = currPage < pageCount ? 1 : 0;
const posts = result[0].data;
res.render("default/index", {
moment: moment,
layout: "default/layout",
website_name: "MEAN Blog",
page_heading: "XPress News",
page_subheading: "A MEAN Stack Blogging Application",
currPage,
posts,
pageDecrement,
pageIncrement,
});
} catch (err) {
console.log("Error: ", err);
res.status(500).send("something went wrong");
}
};
वैसे, पोस्ट स्कीमा में, दिनांक फ़ील्ड के लिए आप default: Date.now()
. का उपयोग करते हैं , इससे दिनांक मान हमेशा समान मान होगा, यह इस प्रारूप में होना चाहिए:default: Date.now