GraphQL을 사용하여 여러 필드의 동적 데이터 쿼리/데이터 필터링 | 몽고DB 몽구스



GraphQL을 사용하여 여러 필드가 있는 데이터 쿼리/필터링은 다르지만 매우 흥미로운 작업입니다. 데이터베이스를 통한 필터링은 항상 간단하면서도 까다로운 작업이었습니다. 그리고 필터링에 여러 필드가 포함되고 GraphQL을 사용하여 데이터를 가져오는 경우 상황이 정말 복잡해집니다. 이 기사는 GraphQL, MongoDB 및 Mongoose를 사용하여 여러 필드의 데이터를 필터링하는 데 도움이 됩니다. 사실 우리는 필드와 해당 값을 입력으로 전송하여 데이터를 쿼리하거나 데이터를 필터링합니다. 이러한 종류의 기능은 일반적으로 검색 데이터에 색상, 가격, 지역, 리뷰 등과 같은 여러 필터를 적용하는 전자 상거래 웹 사이트에서 사용됩니다. NestJS를 사용하여 이 작업을 수행하지만 방법은 NodeJS와 동일하며 JavaScript 기반 플랫폼에도 유사하게 적용할 수 있습니다. 글 말미에 GitHub repo 링크를 첨부하도록 하겠습니다.

**Disclaimer:** I will skip the project creating part to keep the article short and generic for both Nest JS and Node JS, if you are new to NestJS you can see the start of my previous articles where I have mentioned the method to create a project using Nest CLI, I'll mention the link at end.  


코드베이스 설명:



여기서는 사용자 및 휴대폰 데이터베이스가 있는 시나리오를 사용하고 있습니다. 특정 휴대폰을 사용한 모든 사용자를 찾아야 합니다. 휴대 전화 ID의 이름이 있는 배열은 사용자 스키마에서 유지 관리되며 휴대 전화가 있는 별도의 테이블이 DB에 있습니다.

방법 설명:



GraphQL 클라이언트에서 배열 형태로 데이터를 보낼 것입니다. 데이터는 출력이 키-값(field_name:value) 쌍의 개체가 되는 방식으로 처리됩니다.

GraphQL에서 데이터를 가져오기 위한 리졸버:



먼저 GraphQL 클라이언트에서 GraphQL API를 호출하여 데이터를 가져오는 리졸버를 작성해 보겠습니다.

NestJS의 경우:

@Query(() => [User], {name: "FindWithMultipleFields"})

findWithMultipleFields (
@Args('fields', { type: () => [String]} ) fields: any,
@Args('values', { type: () => [[String]]} ) values: any) {

return this.userService.findWithMultipleFields(fields, values);

}


NodeJS의 경우:

const resolvers = 
{   
Query: {     
findWithMultipleFields(fields, values) {       
return users.findWithMultipleFields(fields, values);     
}}}


여기서 Node의 경우 JS 클래스를 사용하고 있습니다.

데이터를 키-값 쌍으로 조작:



이제 이것이 주요 부분이며 기본적인 JavaScript 작업이기 때문에 Node와 Nest 모두에서 유사합니다. 이제 필드 배열과 값 배열이 있습니다. 출력이 {field: value} 쌍의 객체가 되도록 처리해야 합니다.

async findWithMultipleFields (fields: any, value: any): Promise<UserDocument[]> {

const result = value.reduce(function(result, field, index) {
result[fields[index]] = field;
return result;
}, {})
return await this.userModel.find(result);

}


이 코드는 다음과 같은 방식으로 작동합니다.

**Input:** 
field : [model, price]
value: ['Iphone', 20000]

**Output:**  
result: {{model: 'Iphone', price: 20000}} 


mongoose find 함수는 키-값 쌍의 객체를 사용하므로 Model.find()에 변수 결과만 전달하면 필터링된 데이터를 얻을 수 있습니다.

GraphQL에서 데이터 보내기:



여기서는 GraphQL 클라이언트의 스크린샷을 첨부하여 GraphQL API 호출을 보여줍니다.



여기서는 배열 형식으로 데이터를 전달했습니다. 여기에서 단일 필드에 대해 쿼리하고 있지만 테스트할 수 있으며 여러 필드에서 확실히 작동합니다. 출력은 첨부된 스크린샷의 오른쪽에서 볼 수 있습니다.

다음은 이 사용 사례를 구현하기 위해 만든 더미 프로젝트인 최종 코드 베이스에 대한 link입니다.

GitHub - haadbaig/NestJS-concepts at multiple-field-query-gql

결론:

도움이 되었기를 바랍니다. 여러 필드를 필터링하여 데이터베이스에서 데이터를 쿼리하는 것은 간단하면서도 까다로운 작업이며 GraphQL이 스택에 추가되면 더 까다로워지지만 이 기사를 읽고 나면 이해하기 쉬울 것이라고 믿습니다.

내 글이 마음에 들고 도움이 된다면 동료들과 공유하고 댓글과 박수를 남겨주세요. 또한 내 프로필에서 저를 연결하십시오.

GraphQL 변형이 있는 파일 업로드에 대한 이전 기사를 읽을 수도 있습니다. 링크는 다음과 같습니다.

좋은 웹페이지 즐겨찾기