输入文件
"data": {
"abc": {
"Id": "100"
},
"xyz": {
"Id": "123"
}
}
解释:
我想做$match
on data.{i} i is parameter
如果我给"abc" as a parameter
我得到以下输出,我想将多个参数传递给 i
"abc", "xyz"..
我怎样才能做到这一点,使用参数 $match 对象键。
预期输出 :
"data": {
"abc": {
"Id": "100"
},
}
- 检查密钥是否存在或未使用
$exists
- 投影该键,
let i = "abc";
Schema.find(
{ ["data."+i]: { $exists: true } },
{ ["data."+i]: 1 }
)
操场
如果您有数组中的键列表,则第二个选项,
let i = ["abc", "xyz"];
let query = [], project = {};
i.map(k => {
query.push({ ["data."+k]: { $exists: true } });
project["data."+k] = 1;
});
Schema.find({ $or: query }, project);
操场
第三种选择是使用从 MongoDb v4.4 开始的项目运算符,采用更动态的方法,
-
$objectToArray
将对象转换为数组
-
$filter
过滤上面转换后的数组并获取匹配元素
-
$arrayToObject
将数组转换回对象
let i = "abc";
Schema.find(
{ ["data."+i]: { $exists: true } },
{
data: {
$arrayToObject: {
$filter: {
input: { $objectToArray: "$data" },
cond: { $eq: ["$$this.k", i] }
}
}
}
}
)
操场
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)