如何在mongodb中查询嵌套文档中的数据?

如何在mongodb中查询嵌套文档中的数据?,mongodb,pymongo,document-database,Mongodb,Pymongo,Document Database,我对这个嵌套文档的处理太多了。我试着阅读这份文件,并跟踪其他SO回复,看看它是否适合我,但我没有得到我想要的结果。我想从一个大的嵌套文档中提取一些信息 数据 我已将数据上传到mongo游乐场 但结果是空的 输出 大约有1000行(?不确定是否可以称之为行)。我感兴趣的部分是拉动页面。children[3].children[2],其中的名称是公司信息。因此,结果应如下所示: "config": { "ceo": "

我对这个嵌套文档的处理太多了。我试着阅读这份文件,并跟踪其他SO回复,看看它是否适合我,但我没有得到我想要的结果。我想从一个大的嵌套文档中提取一些信息

数据

我已将数据上传到mongo游乐场

但结果是空的

输出

大约有1000行(?不确定是否可以称之为行)。我感兴趣的部分是拉动
页面。children[3].children[2]
,其中的名称是
公司信息
。因此,结果应如下所示:

"config": {
                "ceo": "C. Douglas McMillon",
                "companyType": "Public",
                "country": "U.S.",
                "employees": "2200000",
                "footnote": "Market value as of Sept. 15, 2020.",
                "headquarters": "Bentonville, Ark.",
                "industry": "General Merchandise",
                "marketValue": "389244",
                "profits": "14881",
                "revenues": "523964",
                "ticker": "WMT",
                "title": "Company information",
                "updated": "9/21/20",
                "website": "https://www.stock.walmart.com"
              }
您可以(几乎!)使用聚合查询执行任何操作。在您的情况下,我建议使用
$unwind
将列表转换为onject,然后在目标字段上使用
$match
$project
减少输出,
$replaceRoot
简化结构,
$limit
进行良好的度量,因为实际上有两条记录符合您的条件


Mongo是面向文档的数据库。查询数据库时,您会得到匹配的文档。就像整件事一样。如果需要任何转换—计算字段、文档的一部分或任何其他ETL,则需要使用聚合框架、map reduce或应用程序来操作数据。@Alexlex,我不需要任何聚合。我只尝试提取嵌套文档的一部分。我刚刚尝试了
db.collection.find({“page.children.3.children.2.name”:{“$eq”:“company information”},{“page.children.3.children.2”:1})
。此外,对于某些公司,数组大小可能不同,特别设置子级可能会返回不正确的结果。这就是我挣扎的地方bit@AlexBlex,我可能错了,但这不是投影吗?我还在学习,但这似乎正是我所需要的,不是吗?有一个很好的理由,SO建议将您的尝试添加到问题中。数组索引不是这样工作的。请了解,对于您的具体查询,投影确实是用于请求文档的一部分。检查是否足够。不要将它与我之前评论中的$elemMatch混淆。这是另一个。哇!真是太神奇了。这重新燃起了我的希望。否则我会根据上面的一些评论思考,这是否值得学习。它给了我很多思考和学习的机会。非常感谢。
db.collection.find(
    {"page.children.3.children.2.name": {"$eq": "company-information"}}, 
    {"page.children.3.children.2": 1}
) 
"config": {
                "ceo": "C. Douglas McMillon",
                "companyType": "Public",
                "country": "U.S.",
                "employees": "2200000",
                "footnote": "Market value as of Sept. 15, 2020.",
                "headquarters": "Bentonville, Ark.",
                "industry": "General Merchandise",
                "marketValue": "389244",
                "profits": "14881",
                "revenues": "523964",
                "ticker": "WMT",
                "title": "Company information",
                "updated": "9/21/20",
                "website": "https://www.stock.walmart.com"
              }
db.collection.aggregate([
  {
    "$unwind": "$page.children"
  },
  {
    "$unwind": "$page.children.children"
  },
  {
    "$match": {
      "page.children.children.name": "company-information"
    }
  },
  {
    "$project": {
      "_id": 0,
      "page.children.children.config": 1
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$page.children.children"
    }
  },
  {
    "$limit": 1
  }
])