如果条件变量为空,如何返回所有记录
How to return all the record if condition variable is empty?
我有文章和用户集合。userId
属于文章模型,数据类型为Schema.ObjectId
。在一个视图中,我显示了所有的文章,在顶部,我显示了所有用户的下拉列表,以过滤文章。如果下拉的占位符被选中,所有的文章将返回,如果任何用户被选中,那么该用户的文章将返回。我的API代码如下所示。当选择下拉框的占位符时,UserId
查询字符串将具有空白值,否则它将具有任何现有用户的ID。
exports.list = function (req, res) {
var userId = '';
if (req.query.UserId) {
userId = req.query.UserId;
}
Article.find({userId: userId}).exec(function (err, articles) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});
};
现在的问题是我不能返回所有的文章,因为当查询字符串参数为空白时,查询试图找到那些有userId
为空白的文章。那么,如果条件参数为空或null,我如何跳过条件检查?
我想做和下面给出的一样,这是c# LINQ查询。
var userId = <value from query string>;
var lstArticles = dbContext.Articles.Where(objArticle => (userId == '' || objArticle.userId == userId));
只使用 req.query
对象,因为它是一个包含路由中每个查询字符串参数属性的对象。如果没有查询字符串,则为空对象{}
。
如
// GET /api/articles?userId=57ac922c457312e0e5c1ad6c
req.query.userId
// => "57ac922c457312e0e5c1ad6c"
// GET /api/articles?userId=57ac922c457312e0e5c1ad6c
req.query
// => { "userId": "57ac922c457312e0e5c1ad6c" }
// GET /api/articles
req.query.userId
// => undefined
// GET /api/articles
req.query
// => {}
因此
exports.list = function (req, res) {
var q = req.query;
if (req.query.UserId) {
q.user = req.query.UserId; // because you have a different key in your database
}
Article.find(q).exec(function (err, articles) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});
};
——编辑——
既然你在{ user: userId }
中纠正了user
键的问题中的错字,你可以简单地使用 req.query
对象作为你的猫鼬查找查询文档,只要属性( req.query
参数)匹配数据库文档字段中的属性:
/api/articles → Article.find({ })
/api/articles?userId=foo → Article.find({ userId: 'foo' })
/api/articles?title=bar → Article.find({ title: 'bar' })
/api/articles?userId=foo&title=bar → Article.find({ userId: 'foo', title: 'bar' })
exports.list = function (req, res) {
Article.find(req.query).exec(function (err, articles) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});
};
上述方法意味着传入的任何 req.query
参数将被用作find()
查询,因此建议在find()
方法中使用 req.query
之前过滤它,以便它只包含在模式中定义的字段。
req.query
对象有一个user
参数,但是您已经在模式中定义了一个userId
字段,您可以将其过滤为:
var q = {};
if (req.query.user) {
q.userId = req.query.user; // because you have a different key in your database
}
Article.find(q).exec(callback);
相关文章:
- 输入类型按钮返回历史记录并返回顶部
- HTML5历史记录-返回上一个完整页面按钮
- 如果在过去两个小时内没有记录,返回0,javascript逻辑
- 如何记录调用另一个函数的函数的返回值
- 包含插入的Meteor方法没有返回记录ID作为结果
- 如何返回可用的历史记录状态数
- 引导选项卡不适用于历史记录.返回选项
- JS函数在浏览器历史记录中返回特定域的上次浏览页面
- 将Function-Nothing日志记录返回到控制台
- MSCRM异步javascript SDK.REST.retriveMultipleRecords只返回50条记录,一次
- 如何按顺序记录多个函数的返回
- $http请求在一个请求中返回所有记录而不分页
- ExtJs getTotalCount()未返回存储中的记录数
- Delete方法不适用于Indexed DB HTML5.它返回成功,但未删除记录
- Object.keys(obj).length 返回字符总和而不是记录总数
- FetchXML 查询在子网格中返回的动态 CRM 2015 中的活动记录 - 主题超链接将打开新的活动
- 使用 Prepare 语句插入数据不会返回插入的记录
- 使用 limit 解析“or”查询将返回忽略单个查询限制的所有记录
- PHP 设置默认值以从 ajax 页面返回记录
- nodejs-mssql返回记录集