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