sql >> データベース >  >> NoSQL >> MongoDB

コレクション内のすべてのドキュメントをカウントし、MongoDBとExpress.jsを使用してコントローラーでcontを使用するにはどうすればよいですか?

    これは、mongodb集約フレームワークを使用すると簡単に実行できます。

    $facet を使用します ドキュメントの総数とともにページ付けされたデータを取得するための集計。

    集約フレームワークでは、 $lookup を使用します。 マングースの代わりに。 $ lookupは配列を返します。配列の最初のアイテムを取得するには、 $ arrayElemAt $addFields 内の演算子 。

    遊び場

    そして、これがあなたのアプリに適用するコードです:(最初の$ match集約はここでは不要ですが、将来必要になるかもしれない場合に備えて入れます)

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

    ちなみに、postスキーマでは、日付フィールドにdefault: Date.now()を使用します 、これにより、日付値は常に同じ値になります。次の形式である必要があります:default: Date.now



    1. MongoDB –独自のSSL証明書を持参してください

    2. SQLで文字列と数値を連結する

    3. Lombok-java.lang.StackOverflowError:toStringメソッドでnull

    4. NestJS:セッションベースのユーザー認証を実装する方法