MongoDB中包含给定子字段的所有字段
在MongoDB中,我知道我可以用MongoDB中包含给定子字段的所有字段,mongodb,mongodb-query,pymongo,Mongodb,Mongodb Query,Pymongo,在MongoDB中,我知道我可以用$exists和点符号检查子字段是否存在,如下所示: ...{field.subfield: {$exists: 1}}... 但这显然只在我知道在哪个字段中查找我的子字段时起作用。 我有以下格式的文件: { field1: { subfield1: asd, subfield2: asd }, field2: { subfi
$exists
和点符号检查子字段是否存在,如下所示:
...{field.subfield: {$exists: 1}}...
但这显然只在我知道在哪个字段中查找我的子字段时起作用。
我有以下格式的文件:
{
field1: {
subfield1: asd,
subfield2: asd
},
field2: {
subfield2: asd,
subfield3: asd
},
field3: {
subfield1: asd,
subfield3: asd,
}
}
在本例中,假设我感兴趣的子字段是subfield2,我只想投影(或匹配,或其他我正在寻找的一般答案)field1和field2,不包括field3(不包含subfield2)
我的文档可能包含数十个或数百个字段,因此逐个手动检查是不可行的。这就是您想要的吗
db.collection.aggregate([
{
"$project": {
_id: 0
}
},
{
"$project": {
"root": {
"$objectToArray": "$$ROOT"
}
}
},
{
"$unwind": "$root"
},
{
"$match": {
"root.v.subfield2": {
"$exists": true
}
}
},
{
"$group": {
"_id": null,
"root": {
"$addToSet": "$root"
}
}
},
{
"$project": {
"root": {
"$arrayToObject": "$root"
}
}
},
{
"$project": {
"field1": "$root.field1",
"field2": "$root.field2",
_id: 0
}
}
])
试试看