source

$198 결과를 배열 대신 개체로 변환

ittop 2023. 5. 7. 11:51
반응형

$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

반응형