2013-10-26 3 views
0

MongoDB를가 각각 배열을 보유 할 때 두 개의 필드에 인덱스를 만들 수 없습니다 주요 문제 : MongoDb의 두 배열에 의존하는 효율적인 쿼리를 만드는 방법은 무엇입니까?

{a:[1,2], b: [8,9]}

그리고 그것 때문에 내가 다음 문제를 해결하기 위해 노력하고 어려운시기를 겪고있어

.

컬렉션 설명

컬렉션 이름 : 폴더

  • 각 항목의 항목이 많은 (수천)에

    • 각 항목 속할 수 많은 (수천) 사용자가 읽을 수 있습니다. 마지막

      • 반환 :

        내가 효율적인 쿼리를 만들기 위해 내 구조를 다시 포맷 할 필요가 구축 (간체)

      현재 수집 구조

      folderDataArr: [{ 
          _id: 1, 
          dateOfAddingIntoFolder: 01.01.11 
      }, { 
          _id: 2, 
          dateOfAddingIntoFolder: 01.01.12 
      }], 
      userDataArr: [{ 
          _id: 100, 
          isRead: true, 
          dateOfRead: 01.0.10 
      
      }, { 
          _id: 101, 
          isRead: true, 
          dateOfRead: 01.02.31 
      
      
      }] 
      

      쿼리 일부 폴더에 속하고 읽지 않은 N 개의 항목 특정 사용자에 의해. 결과는 그 뉴스가 폴더에 추가 될 때 (즉, "dateOfAddingIntoFolder"필드에 의해) 날짜별로 정렬되어야합니다.

    문제는이 문제를 해결하는 방법

    입니까?

    도움 주셔서 감사합니다.

  • +0

    여기서 말하는 수량은 얼마입니까? 폴더 당 항목 수,이 데이터 집합에 대해 예상되는 폴더 수 및 사용자 수는 얼마나됩니까? –

    답변

    0

    네, 당신의 mongodb에서 컬렉션을 재구성해야합니다. 새로운 엔티티 "뉴스 항목"을 포함하고 최종 출력물은 읽지 않은 뉴스 항목이기 때문에. 나는 다음과 같은 길을 제안한다. 생성과 같은 뉴스 항목의 변화는, 다음 사용자가 로그인하면 각각

    은, (구 로그인 한 타임 스탬프를 선택, createdtimestamp을 변경 을 updatedtimestamp 업데이트 할 때마다

    usercollection 
    - user (email id, last logged in time) 
    
    NewsCollection 
    - newsitem (newsid,newsdata,createdtimestamp,updatedtimestamp) 
    

    을 다음과 같이 그 전에, 나는 당신의 데이터를 시각화했을 현재 업데이트 전). createdtimestamp 또는 updatedtimestamp에서 오래된 로그인 된 타임 스탬프보다 큰 뉴스 항목을 모두 선택하십시오.

    참고 : 뉴스 항목과 사용자는 독립된 개체이므로 단일 모음으로 유지하는 것은 좋지 않습니다.

    참고 *** : 사용자 및 뉴스는 높은 사용자 특정 뉴스 업데이트를 제공 문서 업데이트의보다 번호가 필요하려고, 다 대다 관계가있는 또는 각 뉴스 배열에 더 많은 요소를 조작해야하기 때문에/사용자 관련 변경 사항. 이 작업을 수행하려는 경우 앱 성능에 대해 생각해보십시오.

    이 정보가 도움이되기를 바랍니다.

    +0

    당신은 폴더에 대해 완전히 잊어 버린 것 같습니다 - 전체 아이디어는 각 항목이 가능한 많은 폴더에 속하고 각 사용자마다 읽지 않은 특정 폴더의 항목 만 표시하기를 원합니다. –

    +0

    @Asya Kamsky, 여기서 사용자 및 뉴스 항목은 동적 데이터 컨텐츠입니다. 왜 우리는 폴더/파일 시스템을 저장합니까? –

    +0

    은 요구 사항의 일부이므로 원래 질문을 읽어보십시오. –

    관련 문제