连接MongoDB查询

时间:2015-03-13 17:04:56

标签: mongodb meteor

用户在我的网站上分享帖子,每个帖子都有一个城市和类别以及投票选项。我在顶部帮助用户上有一个菜单来过滤城市,类别,最高投票和最新的帖子。我想做的是:

  • 如果用户更改了城市,我将返回该城市的所有帖子。
  • 如果此用户也更改了类别。好吧,我必须退回该类别的帖子,但也要回到城市。
  • 如果用户选择了最新的井,我必须返回该城市中该类别的最新帖子。
  • 我在城市列表中有一个特殊选项。哪个应该返回所有城市的帖子。并在类别列表中。

我正在使用Meteor&最后做这个意大利面条:

if ( Session.get('topPosts') ){
    if(Session.get("selectedCity") && Session.get("selectedCategory")){
        if (Session.get("selectedCity") === Cities[0] && Session.get("selectedCategory") === Categories[0]){
            return Posts.find({}, {sort: {score: -1}});
        }
        else if (Session.get("selectedCity") === Cities[0]){
            return Posts.find({ category: Session.get("selectedCategory") }, {sort: {score: -1}});
        }
        else if (Session.get("selectedCategory") === Categories[0]){
            return Posts.find({ city: Session.get("selectedCity") }, {sort: {score: -1}});
        }
        return Posts.find({ city: Session.get("selectedCity"), category: Session.get("selectedCategory") }, {sort: {score: -1}});
    }
    ..

我是mongodb的新手。我不知道我是通过简单查询还是在多个查询之间进行组合来实现这一目标。

1 个答案:

答案 0 :(得分:1)

您可以组合一组搜索和排序参数,并在最后应用它们,而不是对每种搜索可能性进行不同的查询。

var selector = {};
var sort = {};
if (Session.get('selectedCity') selector.city = Session.get('selectedCity');
if (Session.get('selectedCategory') selector.category = Session.get('selectedCategory');
if (Session.get('topPosts') sort = {sort: {score: -1}};
return Posts.find(selector, sort);

我将让您了解如何选择特殊的城市选择。