MongoDB查询中的顺序查询有时无法正常工作

时间:2019-12-12 09:08:47

标签: mongodb mongodb-query

我正在按顺序执行2个更新查询。我正在使用生成器功能收益处理javascript的异步行为。

var result = yield db.tasks.update({
                    "_id": task._id,
                    "taskLog":{$elemMatch:{"currentApproverRole": vcurrentApproverRole,
                    "currentApprover": new RegExp(employeeCode, 'i')}}
                }, {
                    $set: {
                        "taskPendingAt": vnextApproverEmpCode,
                        "status": vactionTaken,
                        "lastUpdated": vactionTakenTime,
                        "lastUpdatedBy": employeeCode,
                        "shortPin":shortPin,
                        "workFlowDetails":task.workFlowDetails,
                        "taskLog.$.reason": reason,
                        "taskLog.$.actionTakenBy": employeeCode,
                        "taskLog.$.actionTakenByName": loggedInUser.firstName+" "+loggedInUser.lastName,
                        "taskLog.$.actionTaken": vactionTaken,
                        "taskLog.$.actionTakenTime": vactionTakenTime
                    }
                });
                var vstatus = vactionTaken;

       // Below is the query that is not working properly sometimes

                yield db.groupPicnic.update({"gppTaskId": task.workFlowDetails.gppTaskId, "probableParticipantList.employeeCode": task.createdBy}, 
                    {
                        $set: {
                            'probableParticipantList.$.applicationStatus': vactionTaken
                        }
                    })

有时不执行第二次更新操作(十分之九的工作)。我似乎不知道如何处理此问题?

1 个答案:

答案 0 :(得分:0)

ES6生成器应该提供一种编写迭代器的简单方法。

迭代器只是一个值序列-像数组一样,但是被动态消耗并且延迟生成。

当前,您的代码执行此操作:

let imAnUnresolvedPromise = co().next();
 // exiting app, promise might not resolve in time

通过继续前进,而不是等待承诺(假设您的应用程序关闭),您不能保证它会及时执行,因此您为什么会遇到不稳定的行为。

您需要更改的就是等待诺言解决。

let resolveThis = await co().next();