node.js - 如何在 MongoDB 中创建动态查询?

标签 node.js mongodb express mongoose

我尝试在 mongoose 中编写动态查询,但找不到实现目标的方法。

我想编写一个包含高级视频搜索功能的视频平台。这是我的代码片段:

router.get("/search/video", async (req, res) => {
  let category = JSON.parse(req.query.category); // Array
  let searchOrder = req.query.searchOrder; // String
  let searchText = req.query.searchText; // String
  let channel = req.query.channel; // String

  //query, if all parameters are provided

  Video.find({
    $text: { $search: searchText, $language: "en" },
    category: { $elemMatch: { categoryID: { $in: category } } },
    channelID: channel,
  }).sort({ date_added: searchOrder });
});

但是,如果用户不想搜索特定类别或未指定 channel ,则传输 null,并且找不到合适的视频。我尝试使用字符串,但它不适用于 model.findOne()。 如何编写根据给定参数工作的动态查询?

提前致谢!

最佳答案

只需从请求位构建查询对象,忽略那些虚假的:

const query = {};
if (searchText) {
  query.$text = { $search: searchText, $language: "en" };
}
if (category && category.length) {
  query.category = { $elemMatch: { categoryID: { $in: category } } };
}
if (channel) {
  query.channelID = channel;
}

Video.find(query).sort({ date_added: searchOrder });

关于node.js - 如何在 MongoDB 中创建动态查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60512584/

相关文章:

node.js - 获取由 sequelize.js 生成的原始查询

javascript - 如何在数组的索引 0 处压入一个元素

即使在解码 URL 后,node.js 中的 JSON 解析错误

javascript - 将流映射到惰性 promise 流

java - 停止记录线程并在 mongodb 中提交结果

node.js - NodeJS+Multer 上传图片到服务器?

css - 如何在发布请求中更新 css/HTML?

javascript - MongoDB 查找 $value 存在的位置和时间戳 $gte JS

MongoDB:聚合特定子文档的所有字段的值

express - Express.js : how to handle “Error: ENOENT, unlink” errors?