我正在使用mongoose和node.js,我有一个名为models.js的文件,我在其中定义我的模式然后导出它们。
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
});
但是我正在尝试创建一个新的集合,这样我就可以将我的Players集合保存到一个新集合中,然后清除集合。所以我正在尝试以下内容,我得到has no method 'createCollection'
models.Player.createCollection('week1');
我也试过以下,不太确定如何定义我的目标大声笑但我使用robo mongo创建了一个名为test
的集合
models.Player.copyTo('test')
答案 0 :(得分:2)
使用Mongoose,模型是集合的名称。您可以覆盖它,但是您确定每周需要一个不同的集合吗? Mongo集合类似于rdbms世界中的表。你可能不希望每周都有一张新表。
答案 1 :(得分:0)
这样做的一种方法是:
创建一个方法,将集合的名称和集合模型作为参数, 并返回与给定集合名称和模型对应的mongoose模型。 例如:
function createCollection (collectionName, model) {
return mongoose.model(collectionName, model);
}
然后,您可以使用createCollection
函数来使用相同的模式获取单独的集合。例如:
考虑到您已经定义了播放器的架构,如下所示:
var playerSchema = {
name: String
};
你可以获得第1周玩家的收藏,以及第2周这样的玩家的单独收藏(你可以根据自己的需要将它扩展到你想要的任意数量的收藏品,或固定时间段的收藏品,例如每周等):
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');
}
});