프로그래밍 언어/Database

배열 크기가 1보다 큰 문서 쿼리

Rateye 2021. 11. 30. 09:38
728x90
반응형
질문 : 배열 크기가 1보다 큰 문서 쿼리

다음 형식의 문서가 포함 된 MongoDB 컬렉션이 있습니다.

{
  "_id" : ObjectId("4e8ae86d08101908e1000001"),
  "name" : ["Name"],
  "zipcode" : ["2223"]
}
{
  "_id" : ObjectId("4e8ae86d08101908e1000002"),
  "name" : ["Another ", "Name"],
  "zipcode" : ["2224"]
}

현재 특정 배열 크기와 일치하는 문서를 가져올 수 있습니다.

db.accommodations.find({ name : { $size : 2 }})

name 배열에 2 개의 요소가있는 문서를 올바르게 리턴합니다. $gt 명령을 사용하여 name 필드의 배열 크기가 2보다 큰 모든 문서를 반환 할 수 없습니다.

db.accommodations.find({ name : { $size: { $gt : 1 } }})

name 배열을 가진 모든 문서를 어떻게 선택할 수 있습니까 (현재 데이터 구조를 수정하지 않고도 가능)?

답변

최신 정보:

mongodb 버전 2.2+의 경우 다른 답변 에서 @JohnnyHK 에 의해 설명 된 더 효율적인 방법입니다.

1. $ where 사용

db.accommodations.find( { $where: "this.name.length > 1" } );

그러나...

Javascript는이 페이지에 나열된 기본 연산자보다 느리게 실행되지만 매우 유연합니다. 자세한 내용은 서버 측 처리 페이지를 참조하십시오.

NamesArrayLength 추가 필드를 만들고 이름 배열 길이로 업데이트 한 다음 쿼리에 사용합니다.

db.accommodations.find({"NamesArrayLength": {$gt: 1} });

더 나은 솔루션이 될 것이며 훨씬 더 빠르게 작동 할 것입니다 (인덱스를 만들 수 있습니다).

출처 : https://stackoverflow.com/questions/7811163/query-for-documents-where-array-size-is-greater-than-1
728x90
반응형