Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将键和值推送到数组并构建动态查询?_Javascript_Mongodb_Object - Fatal编程技术网

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

Javascript 如何将键和值推送到数组并构建动态查询?,javascript,mongodb,object,Javascript,Mongodb,Object,我需要为mongodb构建查询对象。在尝试这个的时候,我得到了这样的输出 输出 {"$match":{"$and":[{id:1},{name:"Alfred"},{location:"moon"},{"values":{"$in":[{name:"u",age: 9}]} }]}} {"$match":{"$and"

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

输出

{"$match":{"$and":[{id:1},{name:"Alfred"},{location:"moon"},{"values":{"$in":[{name:"u",age: 9}]} }]}}
{"$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},{name:"Alfred"},{location:"moon"},{"values":{"$in":[{name:"u",age: 9}]} }]}}
{"$match":{"$and":[{id:1},{name:"Alfred"},{location:"moon"},{"values":{"$in":[{name:"u"},{age: 9}]} }]}}

谢谢

您需要检查是否是密钥数组,如果它的数组是循环的,则为内部条件创建新数组,尝试在代码段下面运行

const queryFormat=(有效负载)=>{
让查询=[];
//循环对象
用于(让输入有效负载){
//是阵列吗?是的
if(!Array.isArray(有效负载[key])){
push({[key]:有效负载[key]});
}
//没有
否则{
让子查询=[];
//循环阵列
for(让skey输入有效载荷[键]){
//循环对象
对于(让okey输入有效载荷[key][skey]){
push({[okey]:有效负载[key][skey][okey]});
}
}
//绑定子查询
push({[key]:{“$in”:subQuery}});
}
}
//返回匹配查询
返回{'$match':查询}
}
常数有效载荷={
id:1,
姓名:“阿尔弗雷德”,
地点:'月球',
值:[{name:'u',age:9}]
}
让结果=查询格式(有效载荷);

控制台日志(结果)查看输入将非常有用这里的预期测试结果是什么<代码>类型(有效载荷[键])
?Truthy if not null?有效载荷是(有效载荷[键])的输入类型==“数组”请发布示例输入!