大佬教程收集整理的这篇文章主要介绍了如何将键和值推送到数组并构建动态查询?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要为 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,请注明来意。