在mongodb中查找并保存for循环内部

时间:2017-10-06 05:41:15

标签: arrays mongodb for-loop find save

我的请求包含一系列联系人,我必须确定联系人是否在数据库中:

router.route('/uploadContacts')
    .post(function(req,res){
        var j;
        for( j = 0; j < req.body.vishReqBody.Contacts.length; j++) {
            ProfileDetails.findOne({ 'PhNo' :  req.body.vishReqBody.Contacts[j].PhNo} ,
                function(err, profileDetail) {
                    console.log("*************reqreq********************")

                    console.log(j)
                if(profileDetail && profileDetail.PhNo ){

                    console.log(req.body.vishReqBody.Contacts)

                    console.log("*************reqreq********************")
                    var contactsDetails = new contacts();
                    contactsDetails.PhNo=req.body.vishReqBody.Contacts[j].PhNo
                    contactsDetails.RegStatus=profileDetail.Reg_Status
                    contactsDetails.profileId=profileDetail.Profile_Id
                    contactsDetails.PhoneBookName=req.body.vishReqBody.Contacts[j].Name
                    contactsDetails.updatedByProfileId=req.body.vishReqHeader.AppId

                    contactsDetails.save(function(err,result){

                    })
                }

                });

        }
})

如果存在,则通过添加提取的详细信息来获取详细信息并保存详细信息 如果不只是在数据库中添加联系人,但查询未按预期工作

item

这里是代码

如果我发现它正确显示查找详细信息,当我尝试在for循环中保存第j个值时总是3

不确定正在通过的异步调用

请帮我纠正这个问题,联系人数组中的每个元素都必须找到并保存我的工作方式

1 个答案:

答案 0 :(得分:1)

无需为每个电话号码触发查询

首先获取阵列中的所有电话号码。

var phoneNumberArray =req.vishReqBody.Contacts.map(function(contact){
    return contact.PhNo
})

然后使用以下代码:

ProfileDetails.findOne({ 'PhNo' : {$in:phoneNumberArray}})

要从您的请求中获取匹配联系人的姓名,

req.vishReqBody.Contacts.find(function(contact){
    return contact.PhNo == profileDetail.PhNo
})