我正在设置一个猫鼬查询,我想在其中查找自定义查询对象中提到的特定记录。此查询对象包含键值对(如果存在)。因此,如果 res.query 不包含例如限制,它不会添加到 queryObject 中。
无论出于何种原因,queryObject.limit 参数都会导致空数组。不过,当输入已分配数字的变量时,它会进行过滤。
这不起作用:
const showOneMovie = async(req,res)=>{
try {
const {title, publishDate, genre, skip, sort} = req.query;
const queryObject = {};
if(title){
queryObject.title = title;
}
if(publishDate){
queryObject.publishDate = publishDate;
}
if(sort){
sort === "Ascending" ? queryObject.sort = "-title" : queryObject.sort = "title";
}
queryObject.limit = 2;
let data = await Movie.find(queryObject).limit(queryObject.limit);
res.status(200).json(data);
} catch (error) {
console.log(error)
}
}
这有效:
const showOneMovie = async(req,res)=>{
try {
const {title, publishDate, genre, skip, sort} = req.query;
const queryObject = {};
if(title){
queryObject.title = title;
}
if(publishDate){
queryObject.publishDate = publishDate;
}
if(sort){
sort === "Ascending" ? queryObject.sort = "-title" : queryObject.sort = "title";
}
const limit = 2;
let data = await Movie.find(queryObject).limit(limit);
res.status(200).json(data);
} catch (error) {
console.log(error)
}
}
我知道我可以跳过这个问题,但我真的很想了解这种行为。
因为在 queryParams 中,您获得限制的字符串数据类型,并且限制接受整数。 尝试在第一个函数中输入限制。 在第二个函数中,您使用整数作为限制,这就是第二个函数起作用的原因。