1

リスト全体 (テストでは 234 個のオブジェクト) に対して REST 要求を行う前に、25 個のオブジェクトのリストでブートストラップするページがあります。

2 つの異なるエントリ ポイントを介して同じクエリにアクセスするため、関数に抽象化します。

ideaListTrailingWeek: function index(req, limit){
    var user = req.user
    var Idea = req.db.models.dili_forum;

    var now = new Date()
    // set now to be 100 days ago because my data set is old
    now = dateHelper.addDays(now, -100)
    var weekAgo = dateHelper.addDays(now, -7)

    var promise = _.isUndefined(limit) ?
        Idea.qFind({ date_added: orm.gte(weekAgo) },{autoFetchLimit: 2}, ['-id']) :
        Idea.qFind({ date_added: orm.gte(weekAgo) },{autoFetchLimit: 2}, limit, ['-id'])

    return promise.then(function (ideas) {

        var ideasFinal = _.chain(ideas)
            .map(ideaTx.lightIdea)
            .value()

        return ideasFinal
    })
}

これはすべて正常に機能しています (正しい promise を選択して実行しています)。モデルは

 Idea -many-> IdeaIndustry -one-> Industry
 Idea -one-> User -one-> Member

最初に「制限」のあるページをブートストラップする呼び出しでアクセスすると、ページは正常に読み込まれます。モデルは適切な深さまで読み込まれます。ただし、後続の残りの呼び出しは (制限なしの約束を選択して) 行われます。 'ネストされたオブジェクトを返しません(最初のレベルのユーザーでも、より深いオブジェクトでもありません)。

ノード サーバーをリセットし、REST 呼び出し (制限なしで promise を選択) を介してアクセスすると、データ セット全体が適切な深さで読み込まれます。

以前のプロジェクトで hasOne リレーションシップをそのように使用していたので、すべてのリレーションシップを hasOne リレーションシップでセットアップしました。とはいえ、これが適切に機能するようになったら、多くの関係を調査する予定です。このプロジェクトには、オフショアの請負業者によって構築された古いデータベースがあり、名前が悪く、フィールドのラベルが間違っています。モデル:

   var Idea = db.define('dili_forum', {
        id : Number,
        title : String,
        content : String,
        user_id : Number,
    }, {
        autoFetch: true
    }) ;

   var IdeaIndustry = db.define('teaser_industries', {
        id: Number,
        teaser_id: Number,
        sub_industry_id : Number
    }, {
        autoFetch: true
    }) ;

    var Industry = db.define('mas_flattened_industry', {
        industry_id: Number,
        industry_name : String,
        parent_industry_id: String,
        parent_industry_name: String,
        category_name: String
    }, {
        id: 'industry_id',
        autoFetch: true
    }) ;

それが役立つ場合は、ユーザー モデル チェーンを投稿できます。関係の設定方法は次のとおりです。

    Idea.hasOne('user', User, {
        reverse: 'ideas'
        , field: 'user_id'
        , autoFetch: true
    })

    IdeaTicker.hasOne('idea', Idea, {
        reverse: 'tickers'
        , field: 'teaser_id'
        , autoFetch: true
    })

    IdeaIndustry.hasOne('idea', Idea, {
        reverse: 'industries'
        , field: 'teaser_id'
        , autoFetch: true
    })

    IdeaIndustry.hasOne('industry', Industry, {
        field: 'sub_industry_id'
        , autoFetch: true
    })

何かご意見は?

4

0 に答える 0