meteor.js&mongoDB – 查询多个字段

CONTEXT

我正在尝试创build一个searchfunction,允许用户填写多个字段,提交并查看一个集合中匹配项目的列表。 我使用前端的表单来更新后端的会话variables,然后将其作为查询传递给mongodb集合。

它应该如何工作

如果用户提交场地尺寸,则显示该尺寸的场地。 如果只input一个位置,则显示该位置内的场所。 如果提交了大小和地点,则会显示符合两个条件的地点。

它如何实际运作

如果没有填充,按search会收集集合中的所有项目。 提交位置和尺寸都会产生符合两个标准的场地。 然而, 只填充一个领域而留下另一个领域并没有产生任何结果 。 我想知道为什么这可能是 – 这几乎就像查询是在字面上包含“'的字段search…但是当我离开这两个字段为空时,为什么我看不到这种行为? 非常感谢!

代码片段

//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' } 

所以它可以匹配任何没有名字而且在某个街区的场所。

一个更好的方法是只设置查询条件,如果有search值…

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

我认为这对你会更好一些!