当使用摩卡时,猫鼬指数不起作用

时间:2014-07-23 14:42:23

标签: node.js mongodb mongoose

我的项目文件:

我有User型号:

user.model.js

var UserSchema = new Schema({
    username:        { type: String, required: true, unique: true },
    location:        { 'type': {type: String, enum: "Point", default: "Point"}, coordinates: { type: [Number], default: [0,0]} },
});

UserSchema.index({location: '2dsphere'});

快速路线:

user.route.js

function create(req, res) {
    User.create(req.body, function(err, user) {
        if (err) return res.send(err);

        return res.send(user);
    })
}

user.test.js

describe('test_user', function() {
    it('create user', function(done) {
        request('http://localhost/user')
            .post('/')
            .send({
                username: 'john',
                password: "123"
            })
            .end(function(err, res) {
                if (err) cb(err);
                done()
            });    
    });
});

我有一个drop_databse.js文件,每次运行测试前都会运行:

drop_databse.js

var MongoClient = require('mongoose/node_modules/mongodb').MongoClient


MongoClient.connect('mongodb://localhost/miccity_test', function(err, db) {
    if (err) return console.log(err);
    db.dropDatabase(function(err) {
        if (err) return console.log('drop databse failed!! :\n' + err);
        db.close();
    })
})

当我测试

当我运行测试时:

$ node drop_database.js && mocha

  test_user
    ✓ create user


  1 passing (21ms)

但是,我注意到数据库中的user集合没有location字段的索引!

但我创建了一个文件:

test.js

var mongoose = require('mongoose');
var Schema       = mongoose.Schema;

mongoose.connect('mongodb://localhost/miccity_test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'mongodb connection error:'));


var UserSchema = new Schema({
    username:        { type: String, required: true, unique: true },
   location:        { 'type': {type: String, enum: "Point", default: "Point"}, coordinates: { type: [Number], default: [0,0]} },
});


UserSchema.index({location: '2dsphere'});

var User = mongoose.model('User', UserSchema);

User.create({username: "test"}, function (err) {
    if (err) console.log(err);
})

运行:node drop_databse.js && node test.js,然后检查位置索引,它存在!

是不是意味着mocha无法创建集合索引?

修改

我找到了诀窍:

使用Model.ensureIndexes为schema中声明的每个索引发送ensureIndex命令mongo。

function create(req, res) {
    User.ensureIndexes(function(err){
        User.create(req.body, function(err, user) {
            if (err) return res.send(err);

            return res.send(user);
        })
}

这可能是猫鼬的一个错误,我已经将这个问题提交给了github。

0 个答案:

没有答案