我正在尝试提高查询执行的性能。 MongoDB包含三个(或更多)具有相同结构的文档的集合。像这样的东西:
db.france.insertMany([
{field1: 11, field2: 12, field3: 13},
{field1: 21, field2: 22, field3: 23},
{field1: 31, field2: 32, field3: 33}
])
db.germany.insertMany([
{field1: 11, field2: 12, field3: 13},
{field1: 21, field2: 22, field3: 23},
{field1: 31, field2: 32, field3: 33}
])
db.belgium.insertMany([
{field1: 11, field2: 12, field3: 13},
{field1: 21, field2: 22, field3: 23},
{field1: 31, field2: 32, field3: 33}
])
从两个大学英语“ france”和“德国”获得类似结果的查询(一个查询)应该是什么:
[
{field1: 21, field2: 22, field3: 23},
{field1: 21, field2: 22, field3: 23}
]
非常感谢。
答案 0 :(得分:1)
您可以尝试
$match
,如果您要搜索特定的文档字段$group
为空,并准备法国文档数组$lookup
到gernamny集合并获取所有文档$project
使用$concatArrays
$unwind
解构根数组$replaceWith
替换root中的根对象db.france.aggregate([
// { $match: { field1: 21 } } // optional
{
$group: {
_id: null,
france: { $push: "$$ROOT" }
}
},
{
$lookup: {
from: "germany",
pipeline: [
// { $match: { field1: 21 } } // optional
],
as: "germany"
}
},
{
$project: {
root: {
$concatArrays: ["$france", "$germany"]
}
}
},
{ $unwind: "$root" },
{ $replaceWith: "$root" }
])
注意:如果两个集合中都有数百万条记录,那么我不建议您使用此查询,这可能是因为该查询的速度和效率很高,您需要更改架构设计,或者可以执行2个查询并结合两个结果。
答案 1 :(得分:0)
恐怕对此没有直接解决方案。您将必须手动合并服务器中的两个文档。
但是在这种情况下,我想说的更多是模式设计问题。在这种情况下,我建议您将所有文档存储在一个集合中。然后只需添加一个country
字段。
然后,您可以使用以下查询轻松查询文档:
Coll.find({ country: { $in: ["france", "germany"], field1: 21, field2: 22, field3:23 })