我的問題是我如何獲得一個簡單的 ownerDetails 物件,如果我的代碼有誤,請糾正我
我從我的代碼中得到的資料
{
"status": true,
"data": [
{
"_id": "61a2a9680b122bc154cbd6af",
"ownerName": "Ajay",
"mobile": 878787878,
"designation": "IT",
"gender": "Male",
"age": 26,
"carDetails": [
{
"carName": "BUY",
"color": "blue",
"sheets": 8,
"avgSpeed": 105,
"price": 850000,
"model": "C110"
},
{
"carName": "GTR",
"color": "blue",
"sheets": 4,
"avgSpeed": 105,
"price": 98000,
"model": "G120"
}
]
}
]
}
我想要這樣的資料
{
"status": true,
"ownerDetails": {
"_id": "61a2a9680b122bc154cbd6af",
"ownerName": "Ajay",
"mobile": 878787878,
"designation": "IT",
"gender": "Male",
"age": 26,
"total_car": 2,
}
}
從集合中獲取資料的代碼
exports.getOwnerDetails = async (req, res, next) => {
try {
Owner.aggregate([
{
$match: { ownerName: req.body.ownerName }
},
{
$lookup: {
from: "cars",
localField: "ownerName",
foreignField: "ownerName",
as: "carDetails",
},
},
{
$project: {
"carDetails._id": 0,
"carDetails.ownerName": 0,
},
},
]).then((data) => {
res.json({
status: true,
data: data,
});
});
} catch (error) {
res.status(500).json({
status: false,
msg: "Error : " error,
});
}
};
在可能回傳資料時,我得到了一個 carDetails 陣列,但我只需要所有者擁有多少個,并回傳一個 ownerDetails 的簡單物件
uj5u.com熱心網友回復:
$lookup回傳一個陣列,因為多個值可以匹配連接。如果只想獲取一個值,則可以從陣列中獲取第一個元素。然后你可以添加這些聚合階段:
- 首先
$addFields從陣列中獲取第一個元素(索引 0)。 - 然后使用
$project以獲得所需的輸出。
{
"$addFields": {
"data": {
"$arrayElemAt": ["$data",0]
}
}
},
{
"$project": {
"status": 1,
"ownerDetails": {
"_id": "$data._id",
"ownerName": "$data.ownerName",
"mobile": "$data.mobile",
"designation": "$data.designation",
"gender": "$data.gender",
"age": "$data.age",
"total_car": {
"$size": "$data.carDetails"
}
}
}
}
示例在這里
uj5u.com熱心網友回復:
詢問
- 我不確定這是否是你想要的
- 解除所有所有者的資料
- 并從每個車主那里計算其汽車數量
測驗代碼在這里
aggregate(
[{"$unwind": {"path": "$data"}},
{"$set":
{"data.total_car": {"$size": "$data.carDetails"},
"data.carDetails": "$$REMOVE",
"_id": "$$REMOVE"}},
{"$set": {"ownerDetails": "$data", "data": "$$REMOVE"}}])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/369061.html
