2

语境

我正在尝试创建一个搜索功能,允许用户填写多个字段、提交并查看一个集合中匹配项目的列表。我使用前端的表单来执行此操作,该表单在后端更新会话变量,然后将其作为查询传递给 mongodb 集合。

它应该如何工作

如果用户提交场地大小,则显示该大小的场地。如果只输入了一个位置,则会显示该位置内的场所。如果同时提交了大小和位置,则会显示符合这两个条件的场所。

它实际上是如何工作的

如果未填写任何内容,则按搜索会生成集合中的所有项目。提交位置和规模会产生符合这两个标准的场所。但是,仅填写一个字段而将另一个字段留空不会在 results 中产生任何结果。我想知道为什么会这样 - 就好像查询正在搜索一个字面上包含 ''... 非常感谢帮助!

代码片段

//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({});
    }
});
4

1 回答 1

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);

我认为这对你来说会更好一点!

于 2015-12-11T21:01:03.423 回答