반응형
$198 결과를 배열 대신 개체로 변환
나는 _id에서 $lookup을 하고 있습니다.그래서 결과는 항상 1개의 문서입니다.따라서 저는 결과가 하나의 항목이 있는 배열 대신 객체가 되기를 원합니다.
let query = mongoose.model('Discipline').aggregate([
{
$match: {
project: mongoose.Types.ObjectId(req.params.projectId)
},
},
{
$lookup: {
from: "typecategories",
localField: "typeCategory",
foreignField: "_id",
as: "typeCategory"
}
},
{
$project: {
title: 1, typeCategory: "$typeCategory[0]"
}
}
]);
다음 표기법:"$typeCategory[0]"
작동하지 않습니다.이것을 하는 현명한 방법이 있습니까?
그냥 사용하시면 됩니다.입력 문서에서 배열 필드를 분해하여 각 요소에 대한 문서를 출력합니다.
let query = mongoose.model('Discipline').aggregate([
{
$match: {
project: mongoose.Types.ObjectId(req.params.projectId)
},
},
{
$lookup: {
from: "typecategories",
localField: "typeCategory",
foreignField: "_id",
as: "typeCategory"
}
},
{$unwind: '$typeCategory'},
{
$project: {
title: 1, typeCategory: "$typeCategory"
}
}
]);
$array를 사용할 수 있습니다.엘렘Atin$project
단계.
의 구문$arrayElemAt
이라{ $arrayElemAt: [ <array>, <idxexOfArray> ] }
예:
mongoose.model('Discipline').aggregate([
{
$match: {
project: mongoose.Types.ObjectId(req.params.projectId)
},
},
{
$lookup: {
from: "typecategories",
localField: "typeCategory",
foreignField: "_id",
as: "typeCategory"
}
},
{
$project: {
name: 1, typeCategory: {$arrayElemAt:["$typeCategory",0]}
}
}
]);
사용하다$first
배열의 첫 번째 요소를 반환하려면:
$project: {
title: 1,
typeCategory: {$first: "$typeCategory"}
}
두 컬렉션을 병합하는 경우:
{$replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$typeCategory", 0 ] }, "$$ROOT" ] } } },
{ $project: { typeCategory: 0 } }
언급URL : https://stackoverflow.com/questions/41602831/convert-a-lookup-result-to-an-object-instead-of-array
반응형
'source' 카테고리의 다른 글
Angular-cli 빌드로 사용자 지정 파일을 포함하는 방법은 무엇입니까? (0) | 2023.05.07 |
---|---|
목표-C에서 self = [super init]가 0이 아닌지 확인해야 하는 이유는 무엇입니까? (0) | 2023.05.07 |
Xcode 8 제출 시 "aps-environment 자격이 앱 서명에서 누락됨" (0) | 2023.05.07 |
Xcode에서 실제 아이폰 장치로 아이폰 애플리케이션을 배포하려면 어떻게 해야 합니까? (0) | 2023.05.07 |
Postgre 기록 방법SQL 쿼리? (0) | 2023.05.07 |