从MySQL背景来看,我发现MongoDB有点奇怪。
例如,我还没有创建数据库,但是:
mongoose.connect('mongodb://localhost/kittendb');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
// we're connected!
// Start the application after the database connection is ready
app.listen(3000);
console.log("Listening on port 3000");
});
结果:
the kittendb is created // you'll get error in mysql
另一个:
我还没有创建数据库的集合还,但:
var kittySchema = mongoose.Schema({
name: String
});
var Kitten = mongoose.model('Kitten', kittySchema);
var fluffy = new Kitten({ name: 'fluffy' });
fluffy.save(function (err, fluffy) {
if (err) return console.error(err);
});
结果:
fluffy is inserted into kittens collection! // you'll get an error in mysql
mongo控制台:
> show dbs
kittendb 0.203125GB
local 0.078125GB
> use kittendb
switched to db kittendb
> db.kittens.find()
{ "__v" : 0, "_id" : ObjectId("5768e747cf72dd364e7b2fdf"), "name" : "fluffy" }
那么mongo或mongoose到底是怎么回事?它到底是怎么知道将小猫保存到我尚未创建的小猫收藏中的?
我错过了什么?
它到底是怎么知道将小猫保存到我尚未创建的小猫收藏中的?
猫鼬使用的命名方案基于您的型号名称:
var Kitten = mongoose.model('Kitten', kittySchema);
该模型名为“小猫”。默认情况下,Mongoose将小写并对该名称进行复数(因此“ Kitten”变为“ kittens”)并将其用作集合名称。
至于MongoDB自动创建数据库/集合的原因/方式:这是MongoDB创建者做出的设计决定。由于MongoDB中的数据库和集合是无模式的,因此无需进行显式CREATE
操作(尽管创建某些特殊类型的集合,MongoDB确实具有db.createCollection()
命令)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句