在這里我有兩個集合。
我想通過執行$group聚合或任何其他方法在一個陣列中獲得出版商的詳細資訊。
書籍
[/span>
{>
"_id":8751,
"title":"The Banquet",
"作者":"AB",
"copies":2,
"出版商":[] 。
1,
2
]
},
{>
"_id":8752,
"title":《神曲》,
"作者":"Dante",
"copies":1,
"出版商":[] 。
3,
1
]
}
]
出版商
[/span>
{>
"id":1,
"name":"p 1"。
},
{>
"id":2,
"name":"p 2"。
},
{>
"id":3,
"name":"p 3"。
},
{>
"id":4,
"name":"p 4"。
}
]
我試著用下面的查詢,但結果不是預期的那樣。
db.books.aggregate( [
{
"$unwind": "$publisher".
},
{
"$group": {
"_id": "$publisher",
}
},
{
"$lookup": {
"from": "出版商",
"localField": "_id",
"foreignField": "id",
"as": "publishers", "as".
}
}
])
預期輸出
[/span>
{>
"id":1,
"name":"p 1"。
},
{>
"id":2,
"name":"p 2"。
},
{>
"id":3,
"name":"p 3"。
}
]
如何在陣列中獲得出版商的書籍串列
uj5u.com熱心網友回復:
你可以使用這個聚合查詢:
- 使用
publisher陣列來完成$lookup。是的,你可以使用一個陣列來連接值。 - 然后
$unwind由$lookup回傳的陣列。 - 然后
$group通過id來洗掉重復的抓取$first值的名稱。 - 然后,(可選)使用
$project來輸出id而不是_id。 - 然后(可選)
$sort通過id.
db.Books.aggregate( [
{
"$lookup": {
"from": "Publisher",
"localField": "publisher",
"foreignField": "id",
"as": "publishers", "as".
}
},
{
"$unwind": "$publishers"。
},
{
"$group": {
"_id": "$publishers.id",
"出版商": {
"$first": "$publishers.name".
}
}
},
{
"$project": {
"_id": 0,
"id": "$_id",
"出版商": 1。
}
},
{
"$sort": {
"id": 1.
}
}
])
示例 這里
注意,沒有 "可選 "階段的輸出結果是這樣的
[
{
"_id"。1,
"出版商": "p 1"。
},
{
"_id": 3,
"出版商": "p 3"。
},
{
"_id": 2,
"出版商": "p 2"。
}
]
而在查詢的所有階段:
[
{
"id"。1,
"出版商": "p 1"。
},
{
"id": 2,
"出版商": "p 2"。
},
{
"id": 3,
"出版商": "p 3"。
}
]
uj5u.com熱心網友回復:
如果我理解正確的話,你想用出版商集合中的檔案替換publisher陣列中的數字。你可以簡單地用$lookup聚合管道來做:
db.books.aggregate( [
{
"$lookup"/span>: {
"from": "出版商",
"localField": "publisher",
"foreignField": "id",
"as": "publishers", "as".
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319833.html
標籤:
