提问者:小点点

如何使这个查询条件在Mongoose中是可选的?


我现在正试图使这条路线像这样。

localhost:3000/tasks?repeated=true&finished=false

正如您在“我想要重复&已完成是可选的。但我下面的代码需要这两者

router.get("/tasks", auth, async (req, res) => {
  try {
    // First way
    const match = {};
    if (req.query.finished) {
      match.finished = req.query.finished === "true";
    }
    if (req.query.repeated) {
      match.repeated = req.query.repeated === "true";
    }

    const task = await Task.find({
      owner: req.user._id,
    }).where({
      repeated: match.repeated,
      finished: match.finished,
    });

    res.send(task);

共2个答案

匿名用户

我认为您只需构建自己的查询条件,然后将其放入find中的parameter中。

const query_condition = {
    owner: req.user._id
}

if (req.query.finished) {
    query_condition.finished = req.query.finished === "true";
}
if (req.query.repeated) {
    query_condition.repeated = req.query.repeated === "true";
}

const task = await Task.find(query_condition)
res.send(task);

匿名用户

您可以尝试以下操作:

router.get("/tasks", auth, async (req, res) => {
try {
// First way
const match = {};
const task = await Task.find({
  owner: req.user._id,
}).where({
  repeated: req.query?.repeated,
  finished: req.query?.finished,
});

res.send(task);

或者:

router.get("/tasks", auth, async (req, res) => {
try {
// First way
const match = {};
const task = await Task.find({
  owner: req.user._id,
}).where({
  ...(req.query?.repeated && { repeated: true}),
  ...(req.query?.finished && {finished: true}),
});

res.send(task);