示例資料:
用戶集合:
[
{
"_id":ObjectId("614804bb4236d9b0896f4e7c") 。
"firstName":"Fabian"。
"lastName":"Barlow".
},
{
"_id":ObjectId("614804bb4236d9b0896f4e7d") 。
"firstName":"Chloe"。
"lastName":"Mendez".
},
{
"_id":ObjectId("614804bb4236d9b0896f4e7e") 。
"firstName":"Valentine"。
"lastName":"Sharp"。
}
]
預訂集合:
[
{
"_id":ObjectId("614805534236d9b0896f4e86") 。
"resName":"res-1"。
"duration":"10 days"。
"狀態":"活動"。
" bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7c")
},
{
"_id":ObjectId("614805534236d9b0896f4e87") 。
"resourceName":"res-2"。
"duration":"15 days"。
"狀態":"活動"。
" bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7d")
},
{
"_id":ObjectId("614805534236d9b0896f4e88") 。
"resName":"res-3"。
"duration":"15 天"。
"狀態":"完成"。
" bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7d")
}
]
我試圖對上述集合 "bookings "執行一個聚合查詢,以獲得特定結構的結果。 在使用專案時,我試圖添加一個新的欄位 "bookingCreatorDetails",它需要持有來自 "用戶 "集合的資料,但我沒有得到用戶集合的正確資料,而是得到了 "bookingCreatorDetails "里面的欄位的 "陣列 "型別
試圖創建一個新的欄位 "bookingCreatorDetails"。
嘗試創建查詢("bookings"):
[
{
'$match': {
'status': 'active''$lookup': {
'from': ' users',
'localField': 'bookingCreatorId',
'foreignField': '_id',
'as': 'bookingCreator'。
}
}, {
'$project': {
'resourceName': 1,
'duration': 1,
'bookingCreatorId': 1,
'bookingCreatorDetails.firstName': '$bookingCreator.firstName',
'bookingCreatorDetails.lastName': '$bookingCreator.lastName': 'bookingCreator.lastName'
當前不正確的結果:
[
{
"_id":ObjectId("614805534236d9b0896f4e86") 。
"resName":"res-1"。
"duration":"10 days"。
"狀態":"活動"。
"bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7c")。
"bookingCreatorDetails": {
"firstName": Array,
"lastName":Array.
}
},
{
"_id":ObjectId("614805534236d9b0896f4e87") 。
"resourceName":"res-2"。
"duration":"15 days"。
"狀態":"活動"。
"bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7d")。
"bookingCreatorDetails": {
"firstName": Array,
"lastName":Array.
}
}
預期結果:
[
{
"_id":ObjectId("614805534236d9b0896f4e86") 。
"resName":"res-1"。
"duration":"10 days"。
"狀態":"活動"。
"bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7c")。
"bookingCreatorDetails": {
"firstName": "Fabian",
"lastName":"Barlow"。
}
},
{
"_id":ObjectId("614805534236d9b0896f4e87") 。
"resourceName":"res-2"。
"duration":"15 days"。
"狀態":"活動"。
"bookingCreatorId":ObjectId("614804bb4236d9b0896f4e7d")。
"bookingCreatorDetails": {
"firstName":"Chloe"。
"lastName":"Mendez".
}
}
]
uj5u.com熱心網友回復:
$lookup總是以物件陣列的格式回傳,你可以使用$arrayElemAt運算子從陣列中選擇第一個元素,或者使用4.4版本的$first運算子,
- 使用
$arrayElemAt運算子 。
{
"$project"/span>: {
" resourceName": 1,
"duration": 1,
" bookingCreatorId": 1,
"bookingCreatorDetails": {
$arrayElemAt: ["$bookingCreator"/span>, 0]
}
}
}
- 使用
$first運算子 。
{
"$project"/span>: {
" resourceName": 1,
"duration": 1,
" bookingCreatorId": 1,
"bookingCreatorDetails": {
$first: "$bookingCreator": $first.
}
}
}
如果你想從查詢結果中洗掉
_id,你可以在$project階段之后使用$unset階段,
{ $unset: "bookingCreatorDetails._id" }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324673.html
標籤:
上一篇:如何在Monogodb中從有多個類似檔案的記錄串列中獲得最大的記錄?
下一篇:顯示資料庫中的隨機檔案
