CONTEXT
我正在尝试创建一个搜索功能,允许用户填写多个字段,提交并查看一个集合中的匹配项列表。我使用前端的表单执行此操作,该表单更新后端的会话变量,然后作为查询传递给mongodb集合。
它应该如何运作
如果用户提交场地大小,则会显示该大小的场地。如果仅键入位置,则显示该位置内的场所。如果同时提交了大小和位置,则会显示符合这两个条件的场地。
实际如何运作
如果未填写任何内容,则按搜索将生成集合中的所有项目。提交位置和大小会产生符合这两个标准的场地。但是,仅填充一个字段而另一个字段为空则不会产生任何结果。我想知道为什么会这样 - 它几乎就像查询正在搜索字面上包含的字段一样......但是为什么我不明白为什么将两个字段都留空时的这种行为?非常感谢!
CODE SNIPPET
//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({});
}
});
答案 0 :(得分:1)
答案在于您的查询
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);
我认为这会对你有所帮助!