MongoDB3.2現(xiàn)在允許將來(lái)自多個(gè)集合的數(shù)據(jù)通過(guò)$查找聚合階段..作為一個(gè)實(shí)際例子,讓我們假設(shè)您有關(guān)于書籍的數(shù)據(jù)分成兩個(gè)不同的集合。
第一個(gè)集合,稱為books
具有以下數(shù)據(jù):
{
"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"}
和第二個(gè)收藏品,叫做books_selling_data
具有以下數(shù)據(jù):
{
"_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}
要合并這兩個(gè)集合,只需通過(guò)以下方式使用$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
}
]}
重要的是要注意以下幾點(diǎn):
- “From”集合,在本例中
books_selling_data
無(wú)法切分。 - “AS”字段將是一個(gè)數(shù)組,如上面的示例所示。
- 中的“l(fā)ocalfield”和“foreign field”選項(xiàng)
$查找階段
如果它們?cè)诟髯缘募现胁淮嬖?$查閱文檔
有一個(gè)很好的例子)。
因此,作為一個(gè)結(jié)論,如果您想合并這兩個(gè)集合,在本例中有一個(gè)平面復(fù)制_Sell字段與總副本一起出售,那么您將不得不工作得更多一些,可能使用的是中間集合,然后是$out最后的收藏品