Javascript 在Node.js中使用mongoose时的问题
我正在学习由Basarat Syed先生编写的Node.js 我遇到了以下mongoose代码片段。 我的问题是关于带有Javascript 在Node.js中使用mongoose时的问题,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在学习由Basarat Syed先生编写的Node.js 我遇到了以下mongoose代码片段。 我的问题是关于带有db.close()的最后三行,以及在没有任何关于坦克的声明的情况下,如何收集tanks var mongoose = require('mongoose'); var tankSchema = new mongoose.Schema({name: 'string', size: 'string'}); tankSchema.methods.print = function
db.close()
的最后三行,以及在没有任何关于坦克的声明的情况下,如何收集tanks
var mongoose = require('mongoose');
var tankSchema = new mongoose.Schema({name: 'string', size: 'string'});
tankSchema.methods.print = function () {
console.log('I am', this.name, 'the', this.size)
};
var Tank = mongoose.model('Tank', tankSchema);
mongoose.connect('mongodb://127.0.0.1:27017/demo');
var db = mongoose.connection;
db.once('open', function callback() {
console.log('connected!');
var tony = new Tank({
name: 'tony',
size: 'small'
});
tony.print();
tony.save(function (err) {
if (err) throw err;
Tank.findOne({name: 'tony'}).exec(function (err, tank) {
tank.print();
//======Here are the three lines=======
db.collection('tanks').drop(function(){db.close();});// The one in the book.
//db.close();
//db.collection('t').drop(function(){db.close();});
});
});
});
我的问题是最后三行有什么不同?
收集('tanks')
来自哪里?
为什么不像第二个那样使用db.close()
?
似乎我可以使用任何合法字符串作为collection的参数,例如第三句
't'
。这是怎么发生的?当您保存坦克
模型的一个实例时,mongoose会简单地将集合名称推断为坦克
(小写坦克
+后缀s
),并在需要时创建集合(即,如果它不存在),除非您明确告诉它使用另一个名称,例如:
var tankSchema = new mongoose.Schema({name: 'string', size: 'string'}, { collection: 'myTanks' });
下面的语句删除通过使用储罐
模型保存储罐而创建的储罐
集合,然后关闭连接
db.collection('tanks').drop(function(){db.close();});
db.collection('t').drop(function(){db.close();});
此语句仅关闭连接,不执行任何其他操作
db.close();
这一次删除集合t
(我猜在您的案例中不存在),然后再次关闭连接
db.collection('tanks').drop(function(){db.close();});
db.collection('t').drop(function(){db.close();});
我不明白。你能更恰当地提出你的问题吗?“你的问题到底是什么?”甘道夫·怀特很抱歉我对这些问题的看法不好。我做了一些编辑,不确定现在是否清楚。虽然X.L.Ant现在已经把情况弄清楚了因此,mongoose已经根据模型名-
Tank
隐式创建了集合tanks
。非常感谢你!现在清楚多了。:)确切地如果第一个对象不存在,则在尝试保存该对象时会创建该集合。编辑以澄清这一点。