Tseyuum

Tseyuum 查看完整档案

大连编辑  |  填写毕业院校  |  填写所在公司/组织 weibo.com/122285519 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

Tseyuum 回答了问题 · 2019-09-06

微信服务商和普通商户是否冲突。?

请问这个问题解决没?两者间有没有冲突?

关注 2 回答 1

Tseyuum 提出了问题 · 2019-09-06

微信开放平台-第三方平台 如何代授权的小程序收款?

现有已经全网发布的微信开放平台的【第三方平台服务商】 和 已经通过认证的【微信支付商户】
1、如何将第三方平台和支付商户进行关联?
2、如何设置授权给第三方平台的小程序收款账户为第三方平台服务商的支付商户?

关注 2 回答 0

Tseyuum 提出了问题 · 2019-06-06

MongoDB 索引删除失败

数据库 mongodb v3.0.6
通过 db.test.getIndexes()得到索引如下:

{
     "v" : NumberInt(1),
     "key" : {
         "startTime" : NumberInt(1),
         "endTime" : NumberInt(1),
         "status" : NumberInt(1)
     },
     "name" : "startTime_1_endTime_1_status_1",
     "ns" : "test",
     "background" : true
}

尝试使用以下三种写法删除索引均告知失败:

db.test.dropIndex('startTime_1_endTime_1_status_1')
db.test.dropIndex({startTime:1,endTime:1,status:1})
db.test.dropIndex({startTime:NumberInt(1),endTime:NumberInt(1),status:NumberInt(1)})

错误结果分别对应如下:

{
    "message" : "index not found with name [startTime_1_endTime_1_status_1]",
    "nIndexesWas" : 10,
    "ok" : 0,
    "name" : "MongoError"
}
{
    "message" : "can't find index with key:{ startTime: 1.0, endTime: 1.0, status: 1.0 }",
    "nIndexesWas" : 10,
    "ok" : 0,
    "name" : "MongoError"
}
{
    "message" : "can't find index with key:{ startTime: 1, endTime: 1, status: 1 }",
    "nIndexesWas" : 10,
    "ok" : 0,
    "name" : "MongoError"
}

有没有大神解答下,这是什么情况,以及要怎么处理才可以?

关注 1 回答 0

Tseyuum 回答了问题 · 2019-06-06

解决关于 MongoDB 索引优化的疑问

已解决。
根据官方文档 的提示,试着在第一个$sort前加$limit

    ...
    { $limit: Number.MAX_SAFE_INTEGER },
    { $sort: { score: -1, timeElapsed: 1 } },
    ...

虽然感觉这里的$limit加的一点意义都没有,但就是这么神奇的解决了问题。
个人理解$sort前没有$limit的话是会先全表扫描进行排序,然后再进行查询操作;而前面添加了$limit则是先查询出结果然后再进行排序,进而执行后续的操作...

总之就是这么神奇...

关注 2 回答 1

Tseyuum 提出了问题 · 2019-06-06

解决关于 MongoDB 索引优化的疑问

环境:mongodb 3.0.6
test结构大致如下:

{
    _id:                     ObjectId,
    contest: {
        _id:                 String,
        parentId:            String,
        type:                String,
        name:                String
    },
    contestant: {
        _id:                 String,
        name:                String,
        distraibutor: {
            _id:             String,
            type:            String,
            name:            String
        }
    },
    agent: {
        _id:                 String,
        type:                String,
        name:                String
    },
    score:                   Number,
    startTime:               Date,
    timeElapsed:             Number,
    status:                  String
}

对应查询语句如下:

db.test.aggregate(
    [
        { $match: {
            $and: [
                { $or: [
                    { 'contest.type': 'xxxxxx' },
                    { 'contest.type': null } 
                ] },
                { $or: [
                    { 'agent._id': 'xxxxxx' },
                    { 'contestant.distributor._id': { $in: [ 'xxxxx', 'xxxxx' ] } }
                ] }
            ],
            status: { $in: [ 'xxxxx', 'xxxxx' ] }
        } },
        { $sort: { score: -1, timeElapsed: 1 } },
        { $group: {
            _id: '$contestant._id',
            contest: { $first: '$contest' },
            contestant: { $first: '$contestant' },
            score: { $first: '$score' },
            count: { $sum: 1 }
        } },
        { $match: {
            count: { $gt: 0 },
            score: { $gte: 0, $lte: 999 }
        } },
        { $sort: {
            'contest.parentId': 1,
            'contest._id': 1,
            score: -1,
            timeElapsed: 1
        } }
    ]
)

通过 cursor.explain() 方法发现 不论我创建了什么索引,或者把索引都删除掉,查询选用的索引都是{score:-1,timeElapsed:1}

现在的问题就是表中一共才40W的数据,这个查询一次就要让人崩溃(大概1小时)。求大神指导应该怎么优化?

关注 2 回答 1

Tseyuum 回答了问题 · 2019-06-04

【mongodb】求两个集合关联统计的方法

商品表中只是缓存了商品分类的ID
所以没办法直接得出你想要的结果
我能想到的就是先聚合得出结果,然后再查询商品分类表,循环设置分类名称。

db.goods.aggregate(
    [
        { $unwind: '$class' },
        { $group: {
            _id: '$class',
            count: { $sum: 1 }
        } }
    ]
);

关注 2 回答 2

Tseyuum 回答了问题 · 2019-06-04

解决微信小程序 如何实现分享之后用户没有登录就跳转首页

1、设置中间页。用户点击后进入中间页,根据用户登录状态,跳转到不同的页面。
2、商品详情页添加验证用户登录状态逻辑,如果没有登录,则跳到登录页面。

关注 2 回答 1

Tseyuum 回答了问题 · 2019-06-04

nginx跨端口配置

假如:
网站主页(4200端口):www.news.com
文章(2403端口):www.news.com/articles
图片(8000端口):www.news.com/images

server {
    listen      80;
    location /articles {
        proxy_pass       127.0.0.1:2403/;
        ...
    }
    location /images {
        proxy_pass       127.0.0.1:8000/;
        ...
    }
    location / {
        proxy_pass       127.0.0.1:4200;
        ...
    }
    ...
}

关注 2 回答 1

Tseyuum 提出了问题 · 2019-06-04

关于`node-schedule`使用的一些请教

首先项目是通过node-schedule包来实现定时任务功能的,如果想要通过数据库动态管理定时任务(添加任务、删除任务、变更任务执行时间),有什么好的思路和方法么?求各位大佬指导。

附上现在使用的代码:

// 定义任务列表
function startJob(code) {
    switch (code) {
        case '001':
            // 任务执行文件
            break;
        default:
            break;
    }
}

// 每5分钟检查定时任务设置
schedule.scheduleJob('0 */5 * * * *', function () {

    TimingTaskSwitchModel.find(
        {
            state: 'on',
            status: 'normal'
        },
        function (e, models) {

            if (e || !models) {
                originalJobs.forEach(function (j) {
                    try {
                        schedule.cancelJob(j);
                    } catch (error) {
                        console.log(moment().format('YYYY-MM-DD HH:mm:ss.SSS') + ' 取消任务:', j, error);
                    }
                });
            }

            openedJobs = [];
            allJobs = [];

            models.forEach(function (taskSwitch) {

                time = null;
                taskSwitch = taskSwitch.toObject();

                if (taskSwitch['rule'] && typeof taskSwitch['rule'] === 'object') {
                    time = new schedule.RecurrenceRule();
                    (((taskSwitch['rule'] || {})['second'] || [])[0] || ((taskSwitch['rule'] || {})['second'] || [])[0] === 0) && (time['second'] = (taskSwitch['rule'] || {})['second']);
                    (((taskSwitch['rule'] || {})['minute'] || [])[0] || ((taskSwitch['rule'] || {})['minute'] || [])[0] === 0) && (time['minute'] = (taskSwitch['rule'] || {})['minute']);
                    (((taskSwitch['rule'] || {})['hour'] || [])[0] || ((taskSwitch['rule'] || {})['hour'] || [])[0] === 0) && (time['hour'] = (taskSwitch['rule'] || {})['hour']);
                    (((taskSwitch['rule'] || {})['dayOfWeek'] || [])[0] || ((taskSwitch['rule'] || {})['dayOfWeek'] || [])[0] === 0) && (time['dayOfWeek'] = (taskSwitch['rule'] || {})['dayOfWeek']);
                } else if (!taskSwitch['rule'] && taskSwitch['date']) {
                    time = new Date(taskSwitch['date']);
                }

                if (time) {
                    openedJobs.push({
                        code: taskSwitch['code'],
                        time: time
                    });
                    allJobs.push(taskSwitch['code']);
                }
            });

            executionJobs = openedJobs;

            originalJobs.forEach(function (originalJob) {
                if (allJobs.indexOf(originalJob) < 0) {
                    console.log(moment().format('YYYY-MM-DD HH:mm:ss.SSS') + ' 取消任务:' + originalJob);
                    if (schedule.scheduledJobs[originalJob]) {
                        schedule.cancelJob(originalJob);
                    }
                    delete jobTimes[originalJob];
                }
            });

            originalJobs = allJobs;

        }
    );

});

// 设置定时任务(每5分执行一次)
schedule.scheduleJob('0 */5 * * * *', function () {

    executionJobs.forEach(function (executionJob) {

        if (String.trim(JSON.stringify(jobTimes[executionJob['code']])) !== String.trim(JSON.stringify(executionJob['time']))) {

            console.log(moment().format('YYYY-MM-DD HH:mm:ss.SSS') + ' 任务变更:' + executionJob['code']);

            jobTimes[executionJob['code']] = executionJob['time'];

            if (schedule.scheduledJobs[executionJob['code']]) {
                schedule.cancelJob(executionJob['code']);
            }

            schedule.scheduleJob(executionJob['code'], jobTimes[executionJob['code']], function () {
                startJob(executionJob['code']);
            });

        }

    });

});

关注 1 回答 1

Tseyuum 提出了问题 · 2019-06-04

关于`node-schedule`使用的一些请教

首先项目是通过node-schedule包来实现定时任务功能的,如果想要通过数据库动态管理定时任务(添加任务、删除任务、变更任务执行时间),有什么好的思路和方法么?求各位大佬指导。

附上现在使用的代码:

// 定义任务列表
function startJob(code) {
    switch (code) {
        case '001':
            // 任务执行文件
            break;
        default:
            break;
    }
}

// 每5分钟检查定时任务设置
schedule.scheduleJob('0 */5 * * * *', function () {

    TimingTaskSwitchModel.find(
        {
            state: 'on',
            status: 'normal'
        },
        function (e, models) {

            if (e || !models) {
                originalJobs.forEach(function (j) {
                    try {
                        schedule.cancelJob(j);
                    } catch (error) {
                        console.log(moment().format('YYYY-MM-DD HH:mm:ss.SSS') + ' 取消任务:', j, error);
                    }
                });
            }

            openedJobs = [];
            allJobs = [];

            models.forEach(function (taskSwitch) {

                time = null;
                taskSwitch = taskSwitch.toObject();

                if (taskSwitch['rule'] && typeof taskSwitch['rule'] === 'object') {
                    time = new schedule.RecurrenceRule();
                    (((taskSwitch['rule'] || {})['second'] || [])[0] || ((taskSwitch['rule'] || {})['second'] || [])[0] === 0) && (time['second'] = (taskSwitch['rule'] || {})['second']);
                    (((taskSwitch['rule'] || {})['minute'] || [])[0] || ((taskSwitch['rule'] || {})['minute'] || [])[0] === 0) && (time['minute'] = (taskSwitch['rule'] || {})['minute']);
                    (((taskSwitch['rule'] || {})['hour'] || [])[0] || ((taskSwitch['rule'] || {})['hour'] || [])[0] === 0) && (time['hour'] = (taskSwitch['rule'] || {})['hour']);
                    (((taskSwitch['rule'] || {})['dayOfWeek'] || [])[0] || ((taskSwitch['rule'] || {})['dayOfWeek'] || [])[0] === 0) && (time['dayOfWeek'] = (taskSwitch['rule'] || {})['dayOfWeek']);
                } else if (!taskSwitch['rule'] && taskSwitch['date']) {
                    time = new Date(taskSwitch['date']);
                }

                if (time) {
                    openedJobs.push({
                        code: taskSwitch['code'],
                        time: time
                    });
                    allJobs.push(taskSwitch['code']);
                }
            });

            executionJobs = openedJobs;

            originalJobs.forEach(function (originalJob) {
                if (allJobs.indexOf(originalJob) < 0) {
                    console.log(moment().format('YYYY-MM-DD HH:mm:ss.SSS') + ' 取消任务:' + originalJob);
                    if (schedule.scheduledJobs[originalJob]) {
                        schedule.cancelJob(originalJob);
                    }
                    delete jobTimes[originalJob];
                }
            });

            originalJobs = allJobs;

        }
    );

});

// 设置定时任务(每5分执行一次)
schedule.scheduleJob('0 */5 * * * *', function () {

    executionJobs.forEach(function (executionJob) {

        if (String.trim(JSON.stringify(jobTimes[executionJob['code']])) !== String.trim(JSON.stringify(executionJob['time']))) {

            console.log(moment().format('YYYY-MM-DD HH:mm:ss.SSS') + ' 任务变更:' + executionJob['code']);

            jobTimes[executionJob['code']] = executionJob['time'];

            if (schedule.scheduledJobs[executionJob['code']]) {
                schedule.cancelJob(executionJob['code']);
            }

            schedule.scheduleJob(executionJob['code'], jobTimes[executionJob['code']], function () {
                startJob(executionJob['code']);
            });

        }

    });

});

关注 1 回答 1

认证与成就

  • 获得 2 次点赞
  • 获得 5 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 5 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2019-05-24
个人主页被 248 人浏览