如何在MongoDB中的对象级别进行匹配? [英] How to match on the object level in MongoDB?
本文介绍了如何在MongoDB中的对象级别进行匹配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
输入文档
"data": {
"abc": {
"Id": "100"
},
"xyz": {
"Id": "123"
}
}
说明:我想对数据进行
我得到以下输出,我想将多个参数传递给 $ match
.{i}如果给"abc",则我是参数
.作为参数 i
"abc","xyz" ..
我该怎么做,用参数$匹配对象键.
Explanation :
I want to do the $match
on data.{i} i is parameter
if I give to "abc" as a parameter
I get the following output, I want to pass the multiple parameters to i
"abc", "xyz"..
How I can do that in do that $match the object key using parameter.
预期产量:
"data": {
"abc": {
"Id": "100"
},
}
推荐答案
- 使用
$ exists
检查密钥是否存在 - 投影该键,
let i = "abc";
Schema.find(
{ ["data."+i]: { $exists: true } },
{ ["data."+i]: 1 }
)
第二个选项,如果您有数组中的键列表,
Second option if you have list of keys in array,
- 通过映射为
$ or
条件准备查询,并准备项目部分
- map through prepare a query for
$or
condition, and prepare project part
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开始使用项目操作员的第三种选项,具有更动态的方法,
Third option using project operators starting from MongoDb v4.4, with more dynamic approach,
-
$ objectToArray
将对象转换为数组 -
$ filter
过滤上方已转换的数组并获取匹配的元素 -
$ arrayToObject
将数组转换回对象
$objectToArray
convert object to array$filter
to filter above converted array and get matching elements$arrayToObject
convert array back to object
let i = "abc";
Schema.find(
{ ["data."+i]: { $exists: true } },
{
data: {
$arrayToObject: {
$filter: {
input: { $objectToArray: "$data" },
cond: { $eq: ["$$this.k", i] }
}
}
}
}
)
这篇关于如何在MongoDB中的对象级别进行匹配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文