流星.js&mongoDB-具有多个字段的查询
meteor.js & mongoDB - query with multiple fields
上下文
我正在尝试创建一个搜索功能,允许用户填写多个字段、提交并查看一个集合中匹配项目的列表。我在前端使用一个表单来完成这项工作,它更新后端的会话变量,然后将这些变量作为查询传递给mongodb集合。
它应该如何工作
如果用户提交了场地大小,则会显示该大小的场地。如果只键入了一个位置,则会显示该位置内的场地。如果同时提交了大小和位置,则会显示符合这两个标准的场馆。
它的实际工作方式
如果没有填写任何内容,则按search将生成集合中的所有项目。同时提交位置和大小可以产生符合这两个标准的场地。但是,只填充一个字段,而将另一个字段留空,则不会在结果中产生任何结果。我想知道为什么会这样——这几乎就像查询在搜索一个实际上包含"的字段。。。但是,当两个字段都为空时,为什么我看不到这种行为呢?非常感谢您的帮助!
代码SNIPET
//Search Form Helper
Template.managevenues.helpers({
venue: function () {
var venueNameVar = Session.get('venueNameVar');
var venueLocationVar = Session.get('venueLocationVar');
if(venueNameVar || venueLocationVar){
console.log(venueNameVar);
console.log(venueLocationVar);
return Venues.find({
venueName: venueNameVar,
'venueAddress.neighbourhood': venueLocationVar
});
} else {
return Venues.find({});
}
});
答案在于您的查询
Venues.find({
venueName: venueNameVar,
'venueAddress.neighbourhood': venueLocationVar
});
如果你没有vars
集,它会是这样的。。。
{
venueName: undefined,
'venueAddress.neighbourhood':'someVal'
}
因此,它可以匹配任何没有名字且位于某个社区的场地。
更好的方法是,只有在有值要搜索的情况下才设置查询条件。。。
var query = {};
if(Session.get('venueNameVar')) {
query.venueName = Session.get('venueNameVar');
}
if(Session.get('venueLocationVar') {
query.venueAddress = {
neighbourhood : Session.get('venueLocationVar');
}
}
return Venues.find(query);
我认为这会对你更好!
相关文章:
- 如何从查询字符串中的输入字段发回文本
- 如何在 Meteor 中的 Mongo 查询中使用变量作为字段名称
- j查询检查复选框是否被选中,然后向输入字段添加值
- dojo.查询所需字段
- Mongoose,按填充字段对查询进行排序
- SQL查询-替换字段名称中的句点
- j查询验证单独的年、月、日的日期字段
- j查询各种字段添加,带有JSFiddle的可选复选框
- 对填充字段的 MongoDB 查询
- 隐藏字段值未显示在查询字符串中
- 查询MongoDB中不存在的字段
- 在控制台.log中显示查询的 [对象对象] 的字段
- j查询输入字段格式为 XX-XX-XX
- j查询添加必填项到输入字段
- j查询如何检查字段是否为空,如果是这样,则向另一个元素添加一个类
- 删除时中继错误:中继突变查询:胖查询上的字段名称无效
- j查询如何将值从输入字段设置为其他元素数据属性
- 仅返回MongoDB查询中一个字段的不同值
- 用于查询字符串的位字段
- 按字段从Parse(.com)查询结果中获取特定对象,而无需返回数据库