我尝试在 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/