叮当猫咪
MongoDB3.2现在允许将来自多个集合的数据通过$查找聚合阶段..作为一个实际例子,让我们假设您有关于书籍的数据分成两个不同的集合。第一个集合,称为books具有以下数据:{
"isbn": "978-3-16-148410-0",
"title": "Some cool book",
"author": "John Doe"}{
"isbn": "978-3-16-148999-9",
"title": "Another awesome book",
"author": "Jane Roe"}和第二个收藏品,叫做books_selling_data具有以下数据:{
"_id": ObjectId("56e31bcf76cdf52e541d9d26"),
"isbn": "978-3-16-148410-0",
"copies_sold": 12500}{
"_id": ObjectId("56e31ce076cdf52e541d9d28"),
"isbn": "978-3-16-148999-9",
"copies_sold": 720050}{
"_id": ObjectId("56e31ce076cdf52e541d9d29"),
"isbn": "978-3-16-148999-9",
"copies_sold": 1000}要合并这两个集合,只需通过以下方式使用$lookup:db.books.aggregate([{
$lookup: {
from: "books_selling_data",
localField: "isbn",
foreignField: "isbn",
as: "copies_sold"
}}])在此聚合之后,books集合如下所示:{
"isbn": "978-3-16-148410-0",
"title": "Some cool book",
"author": "John Doe",
"copies_sold": [
{
"_id": ObjectId("56e31bcf76cdf52e541d9d26"),
"isbn": "978-3-16-148410-0",
"copies_sold": 12500
}
]}{
"isbn": "978-3-16-148999-9",
"title": "Another awesome book",
"author": "Jane Roe",
"copies_sold": [
{
"_id": ObjectId("56e31ce076cdf52e541d9d28"),
"isbn": "978-3-16-148999-9",
"copies_sold": 720050
},
{
"_id": ObjectId("56e31ce076cdf52e541d9d28"),
"isbn": "978-3-16-148999-9",
"copies_sold": 1000
}
]}重要的是要注意以下几点:“From”集合,在本例中books_selling_data无法切分。“AS”字段将是一个数组,如上面的示例所示。中的“localfield”和“foreign field”选项$查找阶段如果它们在各自的集合中不存在($查阅文档有一个很好的例子)。因此,作为一个结论,如果您想合并这两个集合,在本例中有一个平面复制_Sell字段与总副本一起出售,那么您将不得不工作得更多一些,可能使用的是中间集合,然后是$out最后的收藏品