匹配 MongoDB 中的键
match the key in MongoDB
我想$match
中一个mongoDB,文档数以千计,所以求动态sol:
$doc.k
等于 $info.data.k
在 k
、$match
之后我们有一个文档只包含 $matchs
的信息,请参阅 预期输出文档,如果您有任何问题,请告诉我。
[
{
"doc": {
"k": "ABC",
"v": {
"sec": 0
}
},
"info": [
{
"data": [
{
"k": "XYZ",
"v": {
"know": "alpha"
}
},
{
"k": "ABC",
"v": {
"know": "alpha"
}
}
]
}
]
}
]
预期的输出文件看起来像
[
{
"doc": {
"k": "ABC",
"v": {
"sec": 0
}
},
"info": [
{
"data": [
{
"k": "ABC",
"v": {
"know": "alpha"
}
}
]
}
]
}
]
$set
- 更新 info
字段。
1.1。 $map
- 由于 info
是一个数组,需要迭代 info
数组中的每个文档和 return 一个新数组。
1.1.1。 $filter
- 按 doc.k
和当前迭代 k
值过滤文档。
db.collection.aggregate([
{
$set: {
info: {
$map: {
input: "$info",
in: {
data: {
$filter: {
input: "$$this.data",
cond: {
$eq: [
"$doc.k",
"$$this.k"
]
}
}
}
}
}
}
}
}
])
我想$match
中一个mongoDB,文档数以千计,所以求动态sol:
$doc.k
等于 $info.data.k
在 k
、$match
之后我们有一个文档只包含 $matchs
的信息,请参阅 预期输出文档,如果您有任何问题,请告诉我。
[
{
"doc": {
"k": "ABC",
"v": {
"sec": 0
}
},
"info": [
{
"data": [
{
"k": "XYZ",
"v": {
"know": "alpha"
}
},
{
"k": "ABC",
"v": {
"know": "alpha"
}
}
]
}
]
}
]
预期的输出文件看起来像
[
{
"doc": {
"k": "ABC",
"v": {
"sec": 0
}
},
"info": [
{
"data": [
{
"k": "ABC",
"v": {
"know": "alpha"
}
}
]
}
]
}
]
$set
- 更新info
字段。1.1。
$map
- 由于info
是一个数组,需要迭代info
数组中的每个文档和 return 一个新数组。1.1.1。
$filter
- 按doc.k
和当前迭代k
值过滤文档。
db.collection.aggregate([
{
$set: {
info: {
$map: {
input: "$info",
in: {
data: {
$filter: {
input: "$$this.data",
cond: {
$eq: [
"$doc.k",
"$$this.k"
]
}
}
}
}
}
}
}
}
])