我有一个集合,我不想只访问具有聚合查询的特定子文档。
考虑每个文档描述具有每个城市的子文档的国家/地区的文档。现在我只想访问慕尼黑的子文档。
{
_id: "123abc",
name: "Germany",
"someAttribute": ...
cities: [
{
"name": "Berlin",
"someAttribute": ...
},
{
"name": "Munich",
"someAttribute": ...
},
{
"name": "Bonn"
},
...
]
}
我知道我可以添加一个索引来加速检索包含慕尼黑相关子文档的文档。我正在寻找的是一种加快子文档本身检索的方法。因为对于大型文档,mongodb扫描文档并提取相关子文档仍需要很长时间。
答案 0 :(得分:0)
鉴于我们在mongodb中有这个文件
{
_id: "123abc",
name: "Germany",
"someAttribute": ["a","b","c"],
cities: [
{
"name": "Berlin",
"someAttribute": ["a","b","c"]
},
{
"name": "Munich",
"someAttribute": ["a","b","c"]
},
{
"name": "Bonn"
}
]
}
然后我们可以执行以下聚合查询
db.test.aggregate([
{ $match: { "cities.name" : "Berlin" } },
{ $unwind: "$cities" },
{ $match: { "cities.name" : "Berlin" } },
{ $project: { "city" : "$cities" } }
]);
这会将退货单据的大小限制在整个城市,从而节省带宽和转移时间。
但是,您应该确保cities.name具有索引
db.test.createIndex( { "cities.name" : 1 } );