sql >> データベース >  >> NoSQL >> MongoDB

Pick<>タイプスクリプトでネストされたファイルにアクセスする方法

    map 機能 は配列用なので、productsを想定します この例のキーは配列であり、オブジェクトではありません。

    まず、まだ行っていない場合は、製品の応答の型定義を適切に記述することをお勧めします

    interface IProduct {
      _id: string,
      category: number,
      gender: number,
      title: string,
      description: string,
      price: number,
      imageFileName: string,
      createdAt: string,
      updatedAt: string,
      __v: number
    }
    
    interface IResponse {
      _id: string;
      products: IProduct[];
    }
    

    次に、Pickを取得します 単一のproductでの作業 オブジェクトの場合、IResponseにインデックスを付けることができます インデックス付きアクセスタイプ を使用したインターフェース 。 productsが必要です indexのプロパティ 配列だからです。

    /*
    
    Indexed Access Types
    
    type Person = { age: number, name: string }[];
    type Age = Person[number]["age"];
    
    */
    
    type Products = ReadonlyArray<
      Pick<
        IResponse["products"][number],
        "_id" | "gender" | "title" | "description" | "price" | "imageFileName"
      >
    >;
    
    

    Pick<IResponse["products"], '_id'...>のようなことをする場合 Pickを使おうとしている 配列からプロパティを抽出すると、エラーが発生します。

    そして、残っているのは、応答から目的のオブジェクトの形状に製品をマッピングすることだけです。

    
    // Query your products
    
    const { products }: IResponse = {
      _id: "611e2febb863ce74ac448220",
      products: [
        {
          _id: "6116a9ecc3e98d500c5e523d",
          category: 5,
          gender: 1,
          title: 'sivdosi',
          description: 'oisbdvoi',
          price: 2394,
          imageFileName: 'http://localhost:3000/images/1628875244435-3564.png',
          createdAt: "2021-08-13T17:20:44.472Z",
          updatedAt: "2021-08-13T17:20:44.472Z",
          __v: 0
        }
      ]
    }
    
    // Get the desired object
    
    const pickedProducts: Products = products.map(({ _id, gender, title, description, price, imageFileName }) => ({
      _id,
      gender,
      title,
      description,
      price,
      imageFileName
    }));
    

    最終結果は次のようになります

    interface IProduct {
      _id: string,
      category: number,
      gender: number,
      title: string,
      description: string,
      price: number,
      imageFileName: string,
      createdAt: string,
      updatedAt: string,
      __v: number
    }
    
    interface IResponse {
      _id: string;
      products: IProduct[];
    }
    
    type Products = ReadonlyArray<
      Pick<
        IResponse["products"][number],
        "_id" | "gender" | "title" | "description" | "price" | "imageFileName"
      >
    >;
    
    // Query your products
    
    const { products }: IResponse = {
      _id: "611e2febb863ce74ac448220",
      products: [
        {
          _id: "6116a9ecc3e98d500c5e523d",
          category: 5,
          gender: 1,
          title: 'sivdosi',
          description: 'oisbdvoi',
          price: 2394,
          imageFileName: 'http://localhost:3000/images/1628875244435-3564.png',
          createdAt: "2021-08-13T17:20:44.472Z",
          updatedAt: "2021-08-13T17:20:44.472Z",
          __v: 0
        }
      ]
    }
    
    // Get the desired object
    
    const pickedProducts: Products = products.map(({ _id, gender, title, description, price, imageFileName }) => ({
      _id,
      gender,
      title,
      description,
      price,
      imageFileName
    }));
    



    1. Mongoは、親キーが不明な値を検索します

    2. 日付のインデックスを作成するにはどうすればよいですか?

    3. mongoDB map/reduceからreduceを引いたもの

    4. ルックアップ集計のパフォーマンスが低い