mongoDB不能createCollection()nodejs?

时间:2014-12-04 22:25:23

标签: node.js mongodb

我正在使用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
});

但是我正在尝试创建一个新的集合,这样我就可以将我的Pl​​ayers集合保存到一个新集合中,然后清除集合。所以我正在尝试以下内容,我得到has no method 'createCollection'

models.Player.createCollection('week1');

我也试过以下,不太确定如何定义我的目标大声笑但我使用robo mongo创建了一个名为test的集合

models.Player.copyTo('test')

2 个答案:

答案 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');
    }
});