【问题标题】:How to paginate with mongoose with query如何通过查询与猫鼬分页
【发布时间】:2020-12-07 16:24:35
【问题描述】:

我是后端和节点 js 的新手。 我想要达到的目标: 我有日历日期,我想查询点击日期的数据。

  1. 现在我有功能可以获取所有日子的所有会议:

     //GET ALL MEETINGS//
    exports.getMeetings = async (req, res) => {
     const meetings = await Meeting.find()
    .populate("determinedBy", "_id name")
    .sort({ date: -1 })
    .select("_id massageType startDate endDate")
    .then(meetings => {
        res.json({ meetings });
    })
    .catch(err => console.log("get meetings", err));
    

    };

  2. 我想更改此方法以仅获取用户单击的所有会议(如果用户单击日期为 2020 年 9 月 21 日,则从该日期获取所有会议,依此类推... 我的架构是这样的:

    const meetingSchema = new mongoose.Schema({
    massageType: {
     type: String,
     enum: ["נשימות", "תאילני", "שוודי", "רקמות עמוק"],
    required: "Massage type is required",
    },
    startDate: {
    type: Date,
    required: "date is required",
    },
    endDate: {
    type: Date,
    required: "date is required",
    },
    determinedBy: {
    type: ObjectId,
    ref: "User",
     },
     created: {
     type: Date,
     default: Date.now(),
     },
    });
    
  3. 我正在使用前端的 axios 将会议发送到状态。

      ////////GET ALL MEETINGS////////
      const getAllMeetings = dispatch => async () => {
      dispatch({ type: "loading", payload: true });
     console.log("ss");
      try {
       const response = await indexApi.get(`/meetings`);
    
       dispatch({
        type: "get_meetings",
        payload: response.data.meetings,
       });
       dispatch({ type: "loading", payload: false });
       } catch (err) {
       dispatch({
        type: "add_message",
        payload: `something went wrong with sig `,
         });
        dispatch({ type: "loading", payload: false });
        }
       };
    

【问题讨论】:

    标签: node.js mongodb react-native mongoose pagination


    【解决方案1】:

    试试这个:

    const cutoff = new Date(); // The date you need.
    const pageOptions = {
        page: parseInt(req.query.page, 10) || 0,
        limit: parseInt(req.query.limit, 10) || 10
    }
    
    MeetingModel.find({startDate: {$lt: cutoff}})
        .skip(pageOptions.page * pageOptions.limit)
        .limit(pageOptions.limit)
        .exec(function (err, doc) {
            if(err) { res.status(500).json(err); return; };
            res.status(200).json(doc);
        });
    

    我也来自以色列 :) 很高兴为您提供帮助。

    【讨论】:

    • 在axios中我需要做简单的get吗?还是需要声明一些东西来做分页?现在我的 axios 看起来像: const response = await indexApi.get(/Meetings);
    • 这取决于您的查询。将 axios 代码添加到您的原始问题中。
    猜你喜欢
    • 2014-10-19
    • 2015-10-08
    • 2013-05-06
    • 1970-01-01
    • 2018-02-19
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多