是否可能首先使用regex查找“字段名”,然后使用该字段名在所有文档中查找其值?
例如,如果我有以下结构:
item : Object
- quantity: 50
- size: Object
- h: 20
理想情况下,如果我想要h的值,我会查询item.antity.size.h ("field.nestedField")。然而,我只知道名称'h‘,但不知道它是嵌套在什么之下。是否可以检索整个字段名(item.antity.size.h)及其值(20)?然后,我想使用这个字段名从所有其他文档中获得值。
发布于 2022-04-02 07:05:45
灵感来源:不返回mongoplayground.net中的期望值
可以使用$function
聚合,如下所示:
db.collection.aggregate([
{
$project: {
data: "$$ROOT"
}
},
{
"$project": {
"flattenKeys": {
"$function": {
"body": "function flatten(dataList, keysToHandle){while(keysToHandle.length){origKeyData = keysToHandle.shift();for (const newKey of Object.keys(origKeyData.objData)){keysToHandle.push({objData:origKeyData.objData[newKey],keyData:`${origKeyData.keyData}.${newKey}`});dataList.push(`${origKeyData.keyData}.${newKey}`);}}return dataList}",
"args": [
[],
[
{
objData: "$data",
keyData: "data"
}
]
],
"lang": "js"
}
}
}
},
{
$project: {
matchingKeys: {
$filter: {
input: "$flattenKeys",
as: "item",
cond: {
$regexMatch: {
input: "$$item",
regex: "keyD"
}
}
}
}
}
}
])
看看它是如何工作的,这里
https://stackoverflow.com/questions/71699746
复制相似问题