如何解决当模式中不存在字段时,在猫鼬中查找不返回任何内容
我有一个像这样的猫鼬模式:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CitizenSchema = new Schema({
SSN: {
type: Number,required: true,unique: true,},firstName: {
type: String,lastName: {
type: String,}
});
const Citizen = mongoose.model('Citizen',CitizenSchema);
module.exports = Citizen;
在我的快速应用中,我有一条这样的路线:
router.get('/',(req,res) => {
if (Object.keys(req.query).length === 0) {
// Get all the citizens if there is no query
Citizen.find({})
.select('-SSN')
.then((citizens) => res.send(citizens));
} else {
const query = req.query;
// Add case insensitive to all queries
for (const q in query) {
query[q] = {
$regex: new RegExp(query[q],'i')
};
}
Citizen.find(query)
.select('-SSN')
.then((citizens) => res.send(citizens))
.catch((err) => res.status(400).send({ msg: 'Bad query request' }));
}
});
所以我要做的是,如果没有查询,我将返回所有公民,如果有查询,我将返回查询结果。
例如,如果我使用诸如 http://localhost:5000/api/citizens/
之类的GET请求将http请求发送到我的路线,我将获得所有公民。而且,如果我使用http://localhost:5000/api/citizens/?lastName=Doe&firstName=john
之类的查询进行发送,我只会得到名字叫John,名字叫Doe的公民。
所以我的问题是,如果我尝试执行http://localhost:5000/api/citizens/?lastName=Doe&q=test
之类的请求,则会得到一个空数组,而不是姓氏为Doe的公民。查询q
使得Citizen.find()
无法正常工作,并且不会返回我正在等待的结果。
如果有人可以帮助我解决此问题,我将不胜感激。
解决方法
您可以尝试在查询中使用$or
:https://kb.objectrocket.com/mongo-db/or-in-mongoose-1018
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。