节点Orm“嵌套对象”未一致返回

时间:2014-04-20 11:32:45

标签: javascript node.js node-orm2

我有一个页面,它在为整个列表发出REST请求(测试中有234个对象)之前用25个对象的列表引导自己。

因为我通过两个不同的入口点访问同一个查询,所以我将其抽象为一个函数:

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

这一切都正常(选择正确的承诺并执行它)。该模型是

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

如果我通过首先使用“限制”引导页面的调用访问,则页面加载正常。模型加载到适当的深度。但随后的休息调用通过(选择没有限制的承诺) ,并且不返回任何嵌套对象(不是第一级用户,也不是深层对象)。

如果我重置节点服务器并通过REST调用访问(选择没有限制的promise),整个数据集将以适当的深度加载。

我已经将所有关系设置为与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
    })

有什么想法吗?

0 个答案:

没有答案