【问题标题】:Find and save inside for loop in mongodb在mongodb的for循环中查找并保存
【发布时间】:2017-10-06 05:41:15
【问题描述】:

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

{
    "vishReqHeader": {
        "ClientId": "0",
        "AppId": "101",
        "ApiCode": "1007",
        "ReqNo": "123456789"
    },
    "vishReqBody": {
        "RegPhNo": "9880889660",
        "Cnt": "3",
        "Contacts": [{
                "PhNo": "9880889660",
                "Name": "Alex"
            },
            {
                "PhNo": "9538607847",
                "Name": "Cindy"
            },
            {
                "PhNo": "9886949651",
                "Name": "Rob"
            }
        ]

    },
    "vishReqTrailer": {
        "DeviceData": "lat=12.9677992|lng=77.596204|IMEI=1234567890|appVer=3.0.1|OS=ANDROID|SoftVer=6.0.1",
        "Authentication": "securitytoken"
    }
}

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

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

                    })
                }

                });

        }
})

在代码中

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

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

请帮助我更正查询,联系人数组中的每个元素都必须查找并保存我的操作方式

【问题讨论】:

    标签: arrays mongodb for-loop find save


    【解决方案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
    })
    

    【讨论】:

    • hoo 是的,但我如何获得 contactsDetails.PhNo=req.body.vishReqBody.Contacts[j].PhNo contactsDetails.PhoneBookName=req.body.vishReqBody.Contacts[j] 的值.Name 是传入请求数组的一部分
    • 查看更新的答案。最后一条语句将从请求中返回联系人对象
    • 你能说一下这个matchedContact是什么
    • 它的 profileDetail 来自您的代码。由数据库匹配并返回的那个。更新了我的代码
    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 2013-08-13
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2021-08-16
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多