mongoose MongoDB中的条件$or

jdg4fx2g  于 2023-02-04  发布在  Go
关注(0)|答案(1)|浏览(184)

我需要在MongoDB中进行from和to date查询。当没有from和to查询参数时,我的解决方案很好,但是当我在URL中写入时,它崩溃了。
有什么问题吗?或者你有更好的解决办法。
错误
{“字符串值”:“"{起始日期:'2022年12月31日星期六' }",“种类”:“字符串”,“值”:{“起始日期”:“2022年12月31日星期六”},“路径”:“日期”,“原因”:空,“值类型”:“对象”,“状态代码”:400}
途径

router.get("/:_id/logs", (req, res) => {
  const fromDate = new Date(req.query.from).toDateString();
  const toDate = new Date(req.query.to).toDateString();
  User.findById(req.params._id)
    .then((user) => {
      Exercise.find({
        $and: [
          { user: req.params._id },
          fromDate !== "Invalid Date"
          ? { date: { $gte: { fromDate } } }
          : {},
          toDate !== "Invalid Date" ? { date: { $lte: { toDate } } } : {},
        ],
      })
        .limit(+req.query.limit)
        .sort({ date: 1 })
        .exec()
        .then((exercises) =>
          res.json({
            username: user.username,
            userId: user._id,
            count: exercises.length,
            logs: exercises,
          })
        )
        .catch((err) => res.json({ ...err, statusCode: 400 }));
    })
    .catch((err) => res.json({ ...err, statusCode: 400 }));
});
zbdgwd5y

zbdgwd5y1#

在这种情况下,首先构建查询运算符更为简单:

const fromDate = new Date(req.query.from).toDateString();
const toDate = new Date(req.query.to).toDateString();

const dateOperator = {};
if (fromDate !== "Invalid Date") {
  dateOperator.$gte = fromDate;
}
if (toDate !== "Invalid Date") {
  dateOperator.$lte = toDate;
}

Exercise.find({
        $and: [
          { user: req.params._id },
          { date: dateOperator },
        ],
      })

相关问题