MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để đếm tất cả các tài liệu trong một bộ sưu tập và sử dụng cont trong bộ điều khiển, với MongoDB và Express.js?

Điều này có thể được thực hiện dễ dàng hơn với khung tổng hợp mongodb.

Chúng tôi sử dụng $ facet tổng hợp để nhận dữ liệu được phân trang cùng với tổng số tài liệu.

Trong khuôn khổ tổng hợp, chúng tôi sử dụng $ lookup thay vì dân cư mongoose. $ lookup trả về một mảng, để lấy mục đầu tiên trong mảng, chúng tôi sử dụng $ arrayElemAt toán tử bên trong $ addFields .

Sân chơi

Và đây là mã để áp dụng cho ứng dụng của bạn:(Việc tổng hợp $ đối sánh đầu tiên là không cần thiết ở đây, nhưng tôi đặt nó trong trường hợp bạn có thể cần nó trong tương lai)

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");
    }
};

Nhân tiện, trong lược đồ bài đăng, đối với các trường ngày, bạn sử dụng default: Date.now() , điều này sẽ làm cho giá trị ngày luôn có cùng giá trị, nó phải ở định dạng sau:default: Date.now



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lỗi 504 khi chèn vào cơ sở dữ liệu mongo

  2. Làm cách nào để thêm trường tăng dần tự động trong MongoDB tổng hợp?

  3. MongoDB:Làm cách nào để xuất đúng bộ sưu tập từ MongoDB sang máy tính của tôi?

  4. kết nối mongoengine và nhiều cơ sở dữ liệu

  5. Sử dụng nhiều cơ sở dữ liệu Mongodb với Meteor.js