Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB中包含给定子字段的所有字段_Mongodb_Mongodb Query_Pymongo - Fatal编程技术网

MongoDB中包含给定子字段的所有字段

MongoDB中包含给定子字段的所有字段,mongodb,mongodb-query,pymongo,Mongodb,Mongodb Query,Pymongo,在MongoDB中,我知道我可以用$exists和点符号检查子字段是否存在,如下所示: ...{field.subfield: {$exists: 1}}... 但这显然只在我知道在哪个字段中查找我的子字段时起作用。 我有以下格式的文件: { field1: { subfield1: asd, subfield2: asd }, field2: { subfi

在MongoDB中,我知道我可以用
$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
    }
  }
])
试试看