2014-12-04 4 views
0

mongoose를 node.js와 함께 사용하고 있는데, models.js라는 파일을 가지고 있는데, 여기에서 내 스키마를 정의한 다음 파일을 내 보냅니다. 제가 DB를 조회 할 때mongoDB createCollection() nodejs를 만들 수 없습니까?

module.exports = { 
    Team : mongoose.model('Team', Team), 
    Player : mongoose.model('Player', Player) 
}; 

나는

models.Team.find({}, function(err, teams) { 
    console.log(teams); // this lists all the teams just fine, function works 
}); 

같은 명령을 실행하지만 내가 다음 컬렉션을 지우고 새에 내 선수 컬렉션을 절약 할 수 있도록 새 컬렉션을 만들려고하고 있습니다. 그래서 아래에 노력하고 그리고 내가 방법도 롤 내 목표를 정의하는 아래, 정말 확실하지를 시도 has no method 'createCollection'

models.Player.createCollection('week1'); 

를 얻을 수 있지만라는 컬렉션을 만들 로보 몽고를 사용했다 test

models.Player.copyTo('test') 

답변

2

몽구스는 모델명이 컬렉션의 이름입니다. 이를 무시할 수 있지만 매주 다른 컬렉션을 원하십니까? Mongo 콜렉션은 rdbms 세계의 테이블과 유사합니다. 당신은 아마 매주 새로운 테이블을 원하지 않을 것입니다. 이 작업을 수행하는

+0

그래, 나에게 최적이라고는 생각하지 않지만, 1 주일의 데이터를 어딘가에 저장 한 다음 2 주 사용 통계를 지워야하므로 앞으로도 계속 과거를 참조 할 수 있습니다. 이 데이터를 어떻게 저장해야하는지에 대한 제안 사항이 있습니까? 특정 주에 요청을하고 싶습니다. 따라서 컴퓨터에 저장하는 것은 옵션이 아닙니다. –

+0

어쩌면 playersByWeek라는 콜렉션을 만들 수 있고 배열을 만들 수 있습니까? 그것은 백본을 가진 고통 클라이언트 측 일 것입니다 .js 그러나 그것은 일할지도 모른다? 전의. '{player_name : 'Michael', [{date : 'week_1', points : 7}, {date : 'week_2', points : 22}}}' –

+0

나는 그것을위한 스키마를 만들 수 있다고 생각한다. 날짜 또는 뭔가 정렬합니다. [{date : week_1, points : 7}])'Then.'models.Players.find ({}, function (err, player) {var 플레이어 = new Players 위클리 ({player_name : player.player_name} 어떻게 든'stats' 배열에 넣을 수 있습니까? –

0

한 가지 방법은 다음과 같이이다 :

가 인수 컬렉션의 이름과 컬렉션의 모델로 를 받아 지정된 컬렉션의 이름과 모델에 해당하는 몽구스 모델을 반환하는 방법을 확인하십시오. 예를 들어 :

function createCollection (collectionName, model) { 
    return mongoose.model(collectionName, model); 
} 

그런 다음 동일한 스키마를 사용하여 별도의 컬렉션을 얻을 수있는 createCollection 기능을 사용할 수 있습니다. 예를 들어 :

는이 같은 플레이어의 스키마를 정의한 것을 고려 : 당신은 주 1 명 선수를위한 수집 및 2 플레이어 같은 주에 대한 분리 수거를 얻을 수

var playerSchema = { 
    name: String 
}; 

(당신은 그것을 확장 할 수 고정 된 시간 기간 동안 컬렉션 즉, 당신이 원하는만큼의 컬렉션에, 또는에 등 매주) 필요에 따라 :

var Player_week_1 = createCollection('week_1_player', playerSchema); 

var Player_week_2 = createCollection('week_2_player', playerSchema); 

가 요약하면, 다음과 같은 작업 코드는 할 수있는 방법을 보여줍니다

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/test'); 

function createCollection (collectionName, model) { 
    return mongoose.model(collectionName, model); 
} 

var playerSchema = { 
    name: String 
}; 

var Player_week_1 = createCollection('week_1_player', playerSchema); 
var Player_week_2 = createCollection('week_2_player', playerSchema); 

var playerA = new Player_week_1({ name: 'playerA-week-1'}); 
playerA.save(function (error) { 
    if (error) { 
     console.log('error saving playerA in week_1_players'); 
    } else { 
     console.log('saved playerA in week_1_players'); 
    } 
}); 

var playerB = new Player_week_2({ name: 'playerB-week-2'}); 
playerB.save(function (error) { 
    if (error) { 
     console.log('error saving playerB in week_2_players'); 
    } else { 
     console.log('saved playerB in week_2_players'); 
    } 
}); 
관련 문제