程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何将键和值推送到数组并构建动态查询?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何将键和值推送到数组并构建动态查询??

开发过程中遇到如何将键和值推送到数组并构建动态查询?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何将键和值推送到数组并构建动态查询?的解决方法建议,希望对你解决如何将键和值推送到数组并构建动态查询?有所启发或帮助;

我需要为 mongodb 构建查询对象。在尝试这个时,我得到了这样的输出,

输出

{"$match":{"$and":[{ID:1},{name:"Alfred"},{LOCATIOn:"moon"},{"values":{"$in":[{name:"u",age: 9}]} }]}}

这是我的代码:

const queryFormat = (payload) => {
    delete payload.userEventID
    var query = {}
     var res = []
    for(key in payload) {
        if(typeof(payload[key])) {
       res.push({ [key]: payload[key] })
        }
        else {
            res.push({"$in" :{ [key]: payload[key] }})
        }
    }
    console.log(res[3])
    querY['$match'] = {"$and" :res}
    console.log(query)    
}


const payload = {
    ID :1,name : 'Alfred',LOCATIOn : 'moon',values : [{name: 'u',age:9}]
}
queryFormat(payload)

预期输出

{"$match":{"$and":[{ID:1},{"values":{"$in":[{name:"u"},{age: 9}]} }]}}

谢谢!

解决方法

您需要检查是否是键数组,如果它的数组然后循环并为内部条件创建新数组,请尝试在代码片段下方运行,

const queryFormat = (payload) => {
    let query = [];
    // LOOP OBjeCT
    for(let key in payload) {
       // IS ARRAY? YES
       if(!Array.isArray(payload[key])) {
          query.push({ [key]: payload[key] });
       }
       // NO 
       else {
          let subQuery = [];
          // LOOP ARRAY
          for(let skey in payload[key]) {
            // LOOP OBjeCT
            for(let okey in payload[key][skey]) {
              subQuery.push({ [okey]: payload[key][skey][okey] });
            }
          }
          // BIND SUB QUERY
          query.push({ [key]: { "$in": subQuery } });
       }
    }
    // RETURN MATCH QUERY
    return { '$match': query }
}

const payload = {
    id :1,name : 'Alfred',LOCATIOn : 'moon',values : [{name: 'u',age:9}]
}

let result = queryFormat(payload);
console.log(result);

大佬总结

以上是大佬教程为你收集整理的如何将键和值推送到数组并构建动态查询?全部内容,希望文章能够帮你解决如何将键和值推送到数组并构建动态查询?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: