0

以下の 2 つの個別の 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});

削減を指摘してくれたロームフーフに感謝します。

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 に答える