我有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。