我在一个不打算连续运行的脚本中使用mongoose,我正面临着一个看似非常简单的问题,但我找不到答案; 简单地说,一旦我调用任何mongoose函数发送请求到mongodb我的nodejs实例永远不会停止,我必须手动杀死它,比如Ctrl + c或Program.exit().
代码看起来大致如下:
var mongoose = require('mongoose');
// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb');
// define some models
// if I include this line for example, node never stop afterwards
var MyModel = mongoose.model('MyModel', MySchema);
Run Code Online (Sandbox Code Playgroud)
我尝试添加对mongoose.disconnect()的调用,但没有结果.除此之外,一切正常(找到,保存,......).
这个问题与此人完全相同,遗憾的是他没有收到任何答复:https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
谢谢
编辑:接受下面的答案,因为它在技术上是正确的,但如果有人再次遇到这个问题,似乎mongoose和/或mongodb驱动程序实际上并没有关闭连接时,如果仍然有查询运行.
它根本不记得断开连接调用,一旦查询完成运行它就不会这样做; 它只是丢弃你的调用,没有抛出异常或任何类型的东西,从来没有真正关闭连接.
所以你有它:确保在调用disconnect()之前已经处理了每个查询,如果你想让它真正起作用的话.
我question在数据库中有300个对象的大集合test.我可以通过MongoDB的交互式shell轻松地与这个集合进行交互; 但是,当我尝试通过Mongoose在express.js应用程序中获取集合时,我得到一个空数组.
我的问题是,如何访问这个已经存在的数据集而不是在Express中重新创建它?这是一些代码:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));
var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });
Run Code Online (Sandbox Code Playgroud)
这输出:
null [] 0
Run Code Online (Sandbox Code Playgroud) 我想使用mongodb数据库,但我注意到有两个不同的数据库,有自己的网站和安装方法:mongodb和mongoose.所以我想问自己这个问题:"我使用哪一个?".
所以为了回答这个问题,我问社区你是否可以解释这两者之间有什么区别?如果可能的利弊?因为他们看起来和我很相似.
我想ObjectId用Mongoose 生成一个MongoDB .有没有办法ObjectId从Mongoose 访问构造函数?
这个问题是关于从头开始生成新的 ObjectId.生成的ID是全新的通用唯一ID.
另一个问题是关于ObjectId从现有字符串表示创建一个.在这种情况下,您已经有一个ID的字符串表示 - 它可能是也可能不是普遍唯一的 - 并且您正在将其解析为ObjectId.
我想删除一些mongodb集合,但这是一个异步任务.代码将是:
var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/xxx');
var conn = mongoose.connection;
['aaa','bbb','ccc'].forEach(function(name){
conn.collection(name).drop(function(err) {
console.log('dropped');
});
});
console.log('all dropped');
Run Code Online (Sandbox Code Playgroud)
控制台显示:
all dropped
dropped
dropped
dropped
Run Code Online (Sandbox Code Playgroud)
all dropped在删除所有集合后,最简单的方法是打印什么?任何第三方都可用于简化代码.
每猫鼬文档的MongooseJS和MongoDB/ Node.js:
当您的应用程序启动时,Mongoose会自动调用
ensureIndex架构中的每个已定义索引.虽然很适合开发,但建议在生产中禁用此行为,因为创建索引会对性能产生重大影响.通过将autoIndex架构选项设置为false来禁用该行为.
这似乎指示在部署之前从mongoose中删除自动索引以优化Mongoose,指示Mongo在应用程序启动时转到所有索引,这似乎是有道理的.
在生产代码中处理索引的正确方法是什么?也许外部脚本应该生成索引?或者,ensureIndex如果单个应用程序是集合的唯一读取器/写入器,则可能是不必要的,因为每次DB写入时它都会继续索引?
编辑:为了补充,MongoDB提供了有关如何进行索引的良好文档,但没有为什么或何时应该执行显式索引指令.在我看来,编写器应用程序应该在具有现有索引的集合上自动更新索引,这实际上更像是一次性的事情(在应用新索引时完成),在这种情况下,Mongoose 应该是一个正常服务器重启后的无操作.ensureIndexautoIndex
我很好奇在我的主模式中使用子文档与更深层的优缺点:
var subDoc = new Schema({
name: String
});
var mainDoc = new Schema({
names: [subDoc]
});
Run Code Online (Sandbox Code Playgroud)
要么
var mainDoc = new Schema({
names: [{
name: String
}]
});
Run Code Online (Sandbox Code Playgroud)
我现在到处都在使用subdocs,但我主要想知道性能或查询我可能会遇到的问题.
我正在尝试使用mongoose来创建数据库和集合.我的代码是:
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/testdb');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
username : String,
password : String
});
mongoose.model('UserInfo', UserInfo);
var user = db.model('UserInfo');
var admin = new user();
admin.username = "sss";
admin.password = "ee";
admin.save();
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,mongoose创建了名为UserInfo而不是userinfo的集合.如何在mongoose中强制收集名称?
请问猫鼬V3.6 +支持批量插入呢?我已经搜索了几分钟,但是这个查询的任何内容都是几年前的答案,答案是明确的.
编辑:
为了将来参考,答案是使用Model.create().create()接受一个数组作为其第一个参数,因此您可以将文档作为数组插入.
我正在做一个包含子项目的Node.js项目.一个子项目将有一个Mongodb数据库,Mongoose将用于包装和查询db.但问题是
要使用多个mongoose实例,Node.js不允许多个模块实例,因为它具有缓存系统require().我知道在Node.js中禁用模块缓存,但我认为这不是一个好的解决方案,因为它只需要mongoose.
我曾尝试使用createConnection()和openSet()猫鼬,但它不是解决方案.
我试图深度复制mongoose实例(http://blog.imaginea.com/deep-copy-in-javascript/)以将新的mongoose实例传递给子项目,但它会抛出RangeError: Maximum call stack size exceeded.
我想知道是否有使用多个数据库与mongoose或任何解决方法来解决这个问题?因为我认为猫鼬非常容易和快速.或任何其他模块作为建议?
mongoose ×10
mongodb ×9
node.js ×9
javascript ×3
asynchronous ×1
database ×1
express ×1
synchronous ×1