0

我将来自两个单独的 mongodb 模式的数据填充到下面的对象中:它们是用户和文章。如何过滤/排序,以便我可以在骨干网中按 user._id 查找文章?这适用于每个用户都有自己的文章的单页博客类型网站。

我正在查看下划线中的 _.filter 和 _.where 函数,但对此仍然很陌生。任何帮助表示赞赏。谢谢。

这是我的服务器上我尝试构建的示例(使用嵌入式模式完成): http://kevg.co:3700/ demo1 和主干模型/视图/集合代码在这里:http: //kevg.co :3700/javascripts/demoj17.js

//Individual Model
  {
    "user": {
      "username": "ho",
      "email": "hom@gmail.com",
      "_id": "51be709a148846ec25000007"
    },
    "name": "money",
    "articlebody": "",
    "_id": "51c1033283376a5808000002",
    "__v": 0,
    "createdAt": "2013-06-19T01:02:42.424Z"
  },

//Rest of data

  {
    "user": {
      "username": "kev",
      "email": "kevo@o.com",
      "_id": "51be6fe9148846ec25000001"
    },
    "name": "bob",
    "articlebody": "",
    "_id": "51c89ab47596ef1018000001",
    "__v": 0,
    "createdAt": "2013-06-24T19:15:00.835Z"
  },
  {
    "user": {
      "username": "kev",
      "email": "kevo@o.com",
      "_id": "51be6fe9148846ec25000001"
    },
    "name": "sasa",
    "articlebody": "sajdja",
    "_id": "51c8a3bf341eb4141f000001",
    "__v": 0,
    "createdAt": "2013-06-24T19:53:35.233Z"
  }
4

2 回答 2

2

我将拥有一组用户以及一组文章。

要获取特定用户发布的文章集合,您可以执行类似于:

// theUser would be the user selected
articlesCollection.where({'User': theUser});

谢谢,Loamhoof 指出减少。

请注意,您的 User 模型还可以包含用户发布的文章的集合。

于 2013-06-26T05:59:57.793 回答
1

假设您的数据如下所示

var data = [{
    "user": {
        "username": "ho",
            "email": "hom@gmail.com",
            "_id": "51be709a148846ec25000007"
    },
        "name": "money",
        "articlebody": "",
        "_id": "51c1033283376a5808000002",
        "__v": 0,
        "createdAt": "2013-06-19T01:02:42.424Z"
}, {
    "user": {
        "username": "kev",
            "email": "kevo@o.com",
            "_id": "51be6fe9148846ec25000001"
    },
        "name": "bob",
        "articlebody": "",
        "_id": "51c89ab47596ef1018000001",
        "__v": 0,
        "createdAt": "2013-06-24T19:15:00.835Z"
}, {
    "user": {
        "username": "kev",
            "email": "kevo@o.com",
            "_id": "51be6fe9148846ec25000001"
    },
        "name": "sasa",
        "articlebody": "sajdja",
        "_id": "51c8a3bf341eb4141f000001",
        "__v": 0,
        "createdAt": "2013-06-24T19:53:35.233Z"
}];

您可以使用过滤器功能Array或下划线中的功能来过滤数据

function getArticles(userName) {
    return _.filter(data, function (item) {
        return item.user.username == userName; // give the property to be used for filtering
    });
}
var kevArticles = getArticles("kev");
var hoArticles = getArticles("ho");

或者您可以使用groupBy下划线对用户的数据进行分组

function groupByUserName(){
    return _.groupBy(data, function (item) {
        return item.user.username; // give the property to be used for filtering
    });
}

 var groupedData = groupByUserName();

这将使它成为下面给出的格式

{
    "ho": [{
        "user": {
            "username": "ho",
            "email": "hom@gmail.com",
            "_id": "51be709a148846ec25000007"
        },
        "name": "money",
        "articlebody": "",
        "_id": "51c1033283376a5808000002",
        "__v": 0,
        "createdAt": "2013-06-19T01:02:42.424Z"
    }],
    "kev": [{
        "user": {
            "username": "kev",
            "email": "kevo@o.com",
            "_id": "51be6fe9148846ec25000001"
        },
        "name": "bob",
        "articlebody": "",
        "_id": "51c89ab47596ef1018000001",
        "__v": 0,
        "createdAt": "2013-06-24T19:15:00.835Z"
    }, {
        "user": {
            "username": "kev",
            "email": "kevo@o.com",
            "_id": "51be6fe9148846ec25000001"
        },
        "name": "sasa",
        "articlebody": "sajdja",
        "_id": "51c8a3bf341eb4141f000001",
        "__v": 0,
        "createdAt": "2013-06-24T19:53:35.233Z"
    }]
于 2013-06-26T07:38:00.663 回答