gpt4 book ai didi

javascript - 在 Node.js 中使用 mongoose 时的问题

转载 作者:行者123 更新时间:2023-12-02 15:12:25 25 4
gpt4 key购买 nike

我正在使用 Beginning Node.js 学习 Node.js由 Basarat Syed 先生撰写。

我遇到了以下 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();});
});
});
});

我的问题是最后三行有什么区别?collection('tanks') 来自哪里?为什么不像第二个那样直接使用 db.close() 呢?似乎我可以使用任何合法字符串作为集合的参数,例如第三句 't'。怎么会发生这种事?

最佳答案

当您保存 Tank 模型的实例时, Mongoose 只需将集合名称推断为 tanks(小写的 Tank + s 后缀),并在需要时创建集合(即,如果它尚不存在),除非您明确告诉它要使用另一个名称,如下所示:

var tankSchema = new mongoose.Schema({name: 'string', size: 'string'}, { collection: 'myTanks' });

以下语句删除您通过使用 Tank 模型保存坦克而创建的 tanks 集合,然后关闭连接

db.collection('tanks').drop(function(){db.close();});

该语句仅关闭连接,不执行任何其他操作

db.close();

这个删除了集合t(我猜你的情况下不存在),然后再次关闭连接

db.collection('t').drop(function(){db.close();});

关于javascript - 在 Node.js 中使用 mongoose 时的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com