2013-08-20 1 views
1

문서에서 제안한대로 Meteor와 MongoDB를 사용하고 있습니다. 관계형 데이터베이스의 배경에서부터, NOSQL 상점에서 데이터를 모델링하기위한 전략을 이해하고자합니다.유성 : 관련 아이템

시나리오는 내가 users이고 각 uservin입니다. 하나의 컬렉션으로 모두 매우 표준적이고 가능합니다.

Users.find({}, sort: {vin_number: -1})

또는 그것을 모델링 할 수있는 더 좋은 방법이있다 : 나는 가장 높은 vin 가장 최근에 구입 한 자동차에 대한 몇 가지 정보를 익명으로 표시 찾으려하지만, 난 그냥 같이 찾을 구성합니까? 주어진 사용자가 vin 이상이 있다면 어떻게 될까요? 관계형 세계에서는 "많은 관계가 있습니다." 그러나 사용자 문서에 vins 배열을 포함하면 가장 높은 숫자를 어떻게 추출 할 수 있습니까?

당신이 볼 수 있듯이, 나는 테이블로서의 모델링에서 임베디드 문서로 근본적인 변화로 씨름하고 있습니다.

어떤 도움을 주셔서 감사합니다. (비록 내가 그렇게 생각하지는 않지만) 관계형 모델링 패턴에서 스키마가없는 패턴으로 부드럽게 마이그레이션하기위한 장소에 대한 포인터를 좋아합니다.

+2

약간 o/t이지만 현재 10gen은 node.js 개발자를 대상으로 온라인 과정을 진행하고 있습니다. m101js를 사용하면 관계형/sql을 문서 기반 데이터베이스로 연결하는 것이 유용 할 수 있습니다. https://education.10gen.com/courses/10gen/M101JS/2013_August/about – booyaa

답변

1

당신은이 빈스의 목록에서 가장 높은 자동차 등록을 얻기 위해 변환 사용할 수 있습니다

Users.find({}, {sort: {vin_number: -1}, transform: function(doc) { 
    doc.vin_number = _.max(doc.vin_number_array); 
    return doc; 
}}) 

나는이 시도 적이, 내가 조금 확실 해요 여부를 변환 또는 정렬이 먼저 다. 그러나 문서에서 vin_number_array에 일련의 vin 번호가있는 경우 vin_number은 밑줄의 max 기능을 사용하는 사람들 중 가장 높은 숫자가됩니다.

1

배열 필드의 경우 집계 프레임 워크에서 명령어 $unwind을 사용할 수 있습니다. 귀하의 제품과 다른 품목을 만들고 평소처럼 쉽게 여과 할 수 있습니다.

{_id: 'KJDKDSJKSJDK', type: 'car', manufacturer: 'opel', model: 'vectra', vins: 1234} 

{_id: 'KJDKDSJKSJDK', type: 'car', manufacturer: 'opel', model: 'vectra', vins: 5678} 

당신이 배열 필드가 변경 볼 수 있듯이이 영사를 위해 두 개의 새 항목을 만들 것입니다

{_id: 'KJDKDSJKSJDK', type: 'car', manufacturer: 'opel', model: 'vectra', vins: [1234,5678]} 

언 와인드 :

예를 들어

Aggregation framework

이 유사한 항목이 int로.

+0

클라이언트 측에서 집계 프레임 워크가 작동하지 않는다는 점에 유의해야합니다 (아직까지) – Dave

+0

클라이언트 측에서는 mongo가 아닙니다. – Denis

+1

Meteor의 클라이언트에 미니 몽고가 있는데, 거기서는 작동하지 않습니다. 즉, 서버 측 호출이 필요합니다. – Dave