Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Node.js中使用mongoose时的问题_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 在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

我正在学习由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 () {
    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
。非常感谢你!现在清楚多了。:)确切地如果第一个对象不存在,则在尝试保存该对象时会创建该集合。编辑以澄清这一点。