• 记录一次moogdb 关联表查询


        getQuery (searchPanelData: any) {
            let _searchPanelData: any = {}
            if (!searchPanelData) {
                return _searchPanelData
            }
            Object.keys(searchPanelData).map((key: string) => {
                const item: any = searchPanelData[key]
                if (!item) {
                    return
                }
                if (typeof item === 'string') {
                    _searchPanelData[key] = new RegExp(item, 'i')
                } else if (Array.isArray(item) && item.length) {
                    if (key === 'risk_type') {
                        _searchPanelData[key] = item
                    } else {
                        _searchPanelData[key] = { '$in': item }
                    }
                } else if (Object.prototype.toString.call(item) === '[object Object]') {
                    const start = item['start']
                    const end = item['end']
                    _searchPanelData[key] = {
                        '$gte': start,
                        '$lte': end
                    }
                }
            })
            return _searchPanelData
        }
       

    getOffsetAndLimit (p: { pageSize?: number, page?: number } = {}): { offset: number, limit: number } { const limit = p.pageSize || 20 let page = p.page || 1 if (page <= 0) { page = 1 } const offset = (page - 1) * limit return { offset, limit, } } /** * 获取列表数据 * @param params * @returns */ async getList<T extends any> (params: ICurd.ICommonListParams) { const { pagination, query, sort, collection, env } = params let _query = this.getQuery(query) const [ riskCol ] = await this.mdbService.getCols({env, collections: [collection]}) // 联表查询 let cursor = await riskCol.aggregate([ { '$lookup': { // 关联的表 from: 'combo_relation_risk', // 用 localField 的字段 匹配 foreignField 的字段 localField: 'risk_code', foreignField: 'relation_risk_list', // 关联表的数据返回到 as 的字段中 as: 'relation_conbo_code_list' } }, // 查询条件 { '$match': { ..._query, _deleted: { '$nin': [true] } } } ]) const offsetAndLimit = { offset: 0, limit: 0 } if (pagination) { const { offset, limit } = this.getOffsetAndLimit(pagination) offsetAndLimit.offset = offset offsetAndLimit.limit = limit } if (pagination) { // 不传 pagination 则读取全部的数据,一般不推荐,前端无法获取全部数据 cursor.skip(offsetAndLimit.offset).limit(offsetAndLimit.limit) } cursor = cursor.sort(sort || { update_at: -1 }) const items = await cursor.toArray() const search = Object.assign({ _deleted: { '$nin': [true] } }, _query) // 获取总条数 const cursorV2 = riskCol.find(search) const count = await cursorV2.count() return { items, count, pagination } }
  • 相关阅读:
    希尔伯特空间(Hilbert Space)
    深度神经网络:特点、问题及解决
    深度神经网络:特点、问题及解决
    中英文对照 —— 手机 App/PC 端软件(系统)、互联网
    中英文对照 —— 手机 App/PC 端软件(系统)、互联网
    Opencv决策树分类器应用
    OpenCV实现朴素贝叶斯分类器诊断病情
    机器学习的实现(语言及库的选择)
    机器学习的实现(语言及库的选择)
    《The Economist》的阅读
  • 原文地址:https://www.cnblogs.com/SuperBrother/p/16434616.html
Copyright © 2020-2023  润新知