2016-11-14 2 views
0

이 문제로 인해 많은 어려움이 있습니다. Meteor.publish에서 객체의 비어 있지 않은 배열을 얻으려면 코드가 필요합니다.Meteor Publish가 비어있는 배열을 가져옵니다.

샘플 구조는 (여기에, 난 그냥 구조를 제시하고 임의의 필드 이름이 있습니다) 아래에 표시됩니다 - 당신은 내가 하늘의 배열을 하나의 '화'합니다 (볼이 볼이 예에서

Books:{ 
    _id:'xyz', 
    name:'book1', 
    image:[binary array], 
    pages:[ 
     { 
      id:1, 
      name:'page1', 
      author:'ueye', 
      picture:[binary array] 
      chapters:{ 
       mon:[ 
       { 
        chapter1:'zzz', 
        chapter2:'xxx' 
       } 
      ],  
      tue:[ 
       { 
        chapter1:'123', 
        chapter2:'yyy' 
       } 
      ], 
      wed:[], 
      thu:[], 
      fri:[], 
      wkd:[], 
      } 
     },      
     { 
     id:2, 
     name:'page2', 
     author:'asfnwro', 
     picture:[binary array], 
     chapters:{ 
       mon:[ 
       { 
        chapter1:'xyz', 
        chapter2:'uuu' 
       } 
      ],  
      tue:[], 
      wed:[ 
       { 
       chapter1:'7777', 
       chapter2:'ieismxi', 
       } 
      ], 
      thu:[], 
      fri:[], 
      wkd:[], 
     } 
     }  
    ] 
} 

종료). 나는 비어 있지 않은 모든 'chapters.tue'를 가져오고 싶습니다. 필자는 전체 문서 만 (이 예제에서는) 'pages.id', 'pages.name', 'pages.picture'및 'chapters.tue'의 모든 필드 ('chapters.tue' ') 비어 있지 않습니다. 챕터에는 항상 요일마다 배열이 있지만 이러한 배열 자체에는 요소가있을 수도 있고 없을 수도 있습니다. 이러한 배열이 채워지면 구조는 항상 동일합니다 (위의 예에서는 항상 chapter1이 있고 배열에는 chapter2가 항상 있습니다).

도움 주셔서 감사합니다. 여기

db.myDoc.aggregate([ 
    {$match:{'_id':'xyz'}}, 
    {$unwind:'$pages'}, 
    {$match:{'pages.chapters.tue':{$not:{$size:0}}}}, 
    {$project:{'name':1, 'pages.chapters.tue':1}}, 
    {$group:{'_id': '$_id','name': {$first:'$name'}, 
     'chapters': { $addToSet:'$pages.chapters.tue'}}   
    }  
]) 

답변

0

지금까지 나는이있어 내가 하나가 MongoDB를 집계에서 반응성을 얻을하는 데 사용할 수있는 패키지 '반응성 골재를'발견은. 그러나 꽤 복잡해지기 때문에 집계가 적합하지 않았습니다. 더블 프로젝션과 더블 그룹핑은 단순해야한다고 생각했습니다. 이 구조가 나에게 의미가 있기 때문에 (소책자가 있고 페이지마다 장이 있고이 경우 장은 요일에 걸쳐 퍼져 있기 때문에) 소장품을 작은 소장품으로 분해하고 싶지 않았습니다. 이 컬렉션을 여러 컬렉션으로 나누기 위해 '그룹화'할 수 있으므로 다시 SQL 서버로 가져옵니다.

필자는 필요한 필드를 투영하여 컬렉션에서 '찾기'를 사용했다. 문제는 'find'가 문서 수준에서 작동하기 때문에 여전히 빈 배열을 얻을 수 있습니다. 필자는 'publish-composite'라는 Meteor 패키지를 사용하여이 구독을 클라이언트 전용 컬렉션에 게시했습니다. 따라서 동일한 'books'컬렉션에 대해 내 응용 프로그램에있는 다른 구독과의 결합이 이루어지지 않습니다. 클라이언트에서 필터링을 수행합니다 (즉, 클라이언트가 배열이 비어 있고 채워진 배열 만 나타냄).

이 기능을 구현하기 위해 간단한 집계 파이프 라인을 알고있는 사용자는 아직 배우기가 어렵습니다.

+0

Meteor 게시와 함께 Mongo aggregation을 사용할 수 없으며, Meteor 메소드 – Khang

+0

만 제안하면 Meteor Publish로 어떻게 위와 같은 작업을 수행 할 수 있습니까? – RichardAu

+0

나는 당신이 컬렉션을 분리해야한다고 생각한다. 분리 된 컬렉션은 myDoc, pages, bags이다. – Khang

0

내가하고 결국 솔루션입니다 - -

관련 문제