MongoError: server instance in invalid state undefined 解决办法
MongoDB关键点集锦(更新中...)
2017-01-20 09:33:48[其它数据库]点击数:15作者:Real_Bird的博客来源: 网络
随机为您推荐的文章:MongDB索引的介绍及使用
索引的重要性,应该无需多说了,它可以优化我们的查询,而且在某些特定类型的查询中,索引几乎是必不可少的。这篇文章主要介绍了MongoDB中的几种常见的索引以及在使用时候的一些注
1、MongoError: server instance in invalid state undefined
参考segmentfault的一个解答
看起来你用的是node-mongodb-native驱动。老版本确实有使用过DB作为顶级对象,不过现在的驱动通常建议把MongoClient用为顶级对象使用。直接参考驱动文档:
https://github.com/mongodb/node-mongodb-native#connecting-to-mongodb
注意MongoClient维护着连接池,所以通常当你的应用退出前都可以不要关闭,保留一个单例的MongoClient一直用就可以了。
我按照这个建议后,确实修复了这个问题。修改后的代码如下(关键代码):
// 使用mongoClient作为顶级对象,而不是require('mongodb')
var mongodbClient = require('mongodb').MongoClient;
// 连接数据库取代了db.open(...)
mongodbClient.connect(url, function(err, db) {
if(err) {
return callback(err);
}
var collection = db.collection('posts');
collection.insertOne(post, function(err) {
if(err) {
return callback(err);
}
callback(null);
db.close();
})
})
通过collection
操作数据库的方法。我打印了collection.__proto__
,如下所示:
{ collectionName: [Getter],
namespace: [Getter],
readConcern: [Getter],
writeConcern: [Getter],
hint: [Getter/Setter],
find: [Function],
insertOne: [Function],
insertMany: [Function],
bulkWrite: [Function],
insert: [Function],
updateOne: [Function],
replaceOne: [Function],
updateMany: [Function],
update: [Function],
deleteOne: [Function],
removeOne: [Function],
deleteMany: [Function],
removeMany: [Function],
remove: [Function],
save: [Function],
findOne: [Function],
rename: [Function],
drop: [Function],
options: [Function],
isCapped: [Function],
createIndex: [Function],
createIndexes: [Function],
dropIndex: [Function],
dropIndexes: [Function],
dropAllIndexes: [Function],
reIndex: [Function],
listIndexes: [Function],
ensureIndex: [Function],
indexExists: [Function],
indexInformation: [Function],
count: [Function],
distinct: [Function],
indexes: [Function],
stats: [Function],
findOneAndDelete: [Function],
findOneAndReplace: [Function],
findOneAndUpdate: [Function],
findAndModify: [Function],
findAndRemove: [Function],
aggregate: [Function],
parallelCollectionScan: [Function],
geoNear: [Function],
geoHaystackSearch: [Function],
group: [Function],
mapReduce: [Function],
initializeUnorderedBulkOp: [Function],
initializeOrderedBulkOp: [Function] }
2、mongodb更新一个数组,如commets是一个数组,添加comment
collection.update({
"name": name,
}, {
$push: {"comments": comment}
})
3、distinct(key, query, options, callback){Promise}
查询集合返回一个带有key
键的值组成的列表,列表的值是不重复的。其中每个集合需要满足query
条件。
var MongoClient = require('mongodb').MongoClient,
test = require('assert');
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// 创建集合
var collection = db.collection('distinctExample2');
// 插入多个文档
collection.insertMany([{a:0, b:{c:'a'}}, {a:1, b:{c:'b'}}, {a:1, b:{c:'c'}},
{a:2, b:{c:'a'}}, {a:3}, {a:3}, {a:5, c:1}], {w:1}, function(err, ids) {
// 返回含有c是1的集合的a属性的值组成的列表。 [5]
collection.distinct('a', {c:1}, function(err, docs) {
test.deepEqual([5], docs.sort());
db.close();
});
})
});
4、查询所有tags中包含tag的文档。tags是数组 [‘a’, ‘b’, ‘c’]的形式
collection.find({tags: 'a'}) // 这样也可以查询到这个集合
5、使用$inc增加某个字段
// 查询到这个文档,将`pv`字段加1,如果不存在`pv`字段,则创建pv字段,初始值为0,并加1
collection.updateOne({
"name": name,
"time.day": day,
"title": title
}, {
$inc: {"pv": 1}
}, function(err) {
if(err) {
return callback(err);
}
db.close();
})
6、mongodb分页,主要用到count
和skip
和limit
属性
Post.getTen = function(name, page, callback) {
mongodbClient.connect(url, function(err, db) {
if(err) {
return callback(err)
}
var collection = db.collection('posts');
var query = {};
if(name) {
query.name = name;
}
// 对于一个query对象,首先使用`count()`来查询到总数目,结果值赋给参数`total`,比如`total`是93,然后使用`find()`查询,并跳过(page-1)*10个结果,返回之后的10个结果,按时间(`time`)降序排序。1是升序,也是默认的。-1是降序
collection.count(query, function(err, total) {
collection.find(query).skip((page - 1) * 10).limit(10).sort({
time: -1
}).toArray(function(err, docs) {
if(err) {
return callback(err);
}
callback(null, docs, total);
db.close();
})
})
})
}
以上就是MongoDB关键点集锦(更新中...)的全文介绍,希望对您学习和使用数据库有所帮助.
索引的重要性,应该无需多说了,它可以优化我们的查询,而且在某些特定类型的查询中,索引几乎是必不可少的。这篇文章主要介绍了MongoDB中的几种常见的索引以及在使用时候的一些注
参考segmentfault的一个解答
看起来你用的是node-mongodb-native驱动。老版本确实有使用过DB作为顶级对象,不过现在的驱动通常建议把MongoClient用为顶级对象使用。直接参考驱动文档:
https://github.com/mongodb/node-mongodb-native#connecting-to-mongodb
注意MongoClient维护着连接池,所以通常当你的应用退出前都可以不要关闭,保留一个单例的MongoClient一直用就可以了。
我按照这个建议后,确实修复了这个问题。修改后的代码如下(关键代码):
// 使用mongoClient作为顶级对象,而不是require('mongodb')
var mongodbClient = require('mongodb').MongoClient;
// 连接数据库取代了db.open(...)
mongodbClient.connect(url, function(err, db) {
if(err) {
return callback(err);
}
var collection = db.collection('posts');
collection.insertOne(post, function(err) {
if(err) {
return callback(err);
}
callback(null);
db.close();
})
})
通过collection
操作数据库的方法。我打印了collection.__proto__
,如下所示:
{ collectionName: [Getter],
namespace: [Getter],
readConcern: [Getter],
writeConcern: [Getter],
hint: [Getter/Setter],
find: [Function],
insertOne: [Function],
insertMany: [Function],
bulkWrite: [Function],
insert: [Function],
updateOne: [Function],
replaceOne: [Function],
updateMany: [Function],
update: [Function],
deleteOne: [Function],
removeOne: [Function],
deleteMany: [Function],
removeMany: [Function],
remove: [Function],
save: [Function],
findOne: [Function],
rename: [Function],
drop: [Function],
options: [Function],
isCapped: [Function],
createIndex: [Function],
createIndexes: [Function],
dropIndex: [Function],
dropIndexes: [Function],
dropAllIndexes: [Function],
reIndex: [Function],
listIndexes: [Function],
ensureIndex: [Function],
indexExists: [Function],
indexInformation: [Function],
count: [Function],
distinct: [Function],
indexes: [Function],
stats: [Function],
findOneAndDelete: [Function],
findOneAndReplace: [Function],
findOneAndUpdate: [Function],
findAndModify: [Function],
findAndRemove: [Function],
aggregate: [Function],
parallelCollectionScan: [Function],
geoNear: [Function],
geoHaystackSearch: [Function],
group: [Function],
mapReduce: [Function],
initializeUnorderedBulkOp: [Function],
initializeOrderedBulkOp: [Function] }
2、mongodb更新一个数组,如commets是一个数组,添加comment
collection.update({
"name": name,
}, {
$push: {"comments": comment}
})
3、distinct(key, query, options, callback){Promise}
查询集合返回一个带有key
键的值组成的列表,列表的值是不重复的。其中每个集合需要满足query
条件。
var MongoClient = require('mongodb').MongoClient,
test = require('assert');
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// 创建集合
var collection = db.collection('distinctExample2');
// 插入多个文档
collection.insertMany([{a:0, b:{c:'a'}}, {a:1, b:{c:'b'}}, {a:1, b:{c:'c'}},
{a:2, b:{c:'a'}}, {a:3}, {a:3}, {a:5, c:1}], {w:1}, function(err, ids) {
// 返回含有c是1的集合的a属性的值组成的列表。 [5]
collection.distinct('a', {c:1}, function(err, docs) {
test.deepEqual([5], docs.sort());
db.close();
});
})
});
4、查询所有tags中包含tag的文档。tags是数组 [‘a’, ‘b’, ‘c’]的形式
collection.find({tags: 'a'}) // 这样也可以查询到这个集合
5、使用$inc增加某个字段
// 查询到这个文档,将`pv`字段加1,如果不存在`pv`字段,则创建pv字段,初始值为0,并加1
collection.updateOne({
"name": name,
"time.day": day,
"title": title
}, {
$inc: {"pv": 1}
}, function(err) {
if(err) {
return callback(err);
}
db.close();
})
6、mongodb分页,主要用到count
和skip
和limit
属性
Post.getTen = function(name, page, callback) {
mongodbClient.connect(url, function(err, db) {
if(err) {
return callback(err)
}
var collection = db.collection('posts');
var query = {};
if(name) {
query.name = name;
}
// 对于一个query对象,首先使用`count()`来查询到总数目,结果值赋给参数`total`,比如`total`是93,然后使用`find()`查询,并跳过(page-1)*10个结果,返回之后的10个结果,按时间(`time`)降序排序。1是升序,也是默认的。-1是降序
collection.count(query, function(err, total) {
collection.find(query).skip((page - 1) * 10).limit(10).sort({
time: -1
}).toArray(function(err, docs) {
if(err) {
return callback(err);
}
callback(null, docs, total);
db.close();
})
})
})
}
以上就是MongoDB关键点集锦(更新中...)的全文介绍,希望对您学习和使用数据库有所帮助.
MongoError: server instance in invalid state undefined 解决办法的更多相关文章
- mongo 数据库提前关闭 避免读写任务没有结束,异步任务没有完成,同步指令提前关闭数据库:'MongoError: server instance pool was destroyed'
mongo 数据库提前关闭 // mongodb - npm https://www.npmjs.com/package/mongodb const mongoCfg = { uri: 'mongod ...
- MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法 1 问题 [root@localhost m ...
- $('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法
$('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法 <input type='checkbox' id='cb'/> ...
- Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!)
Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!) 1.控制面板中卸载所有带sql server的程序. 2.在C盘C:\Program Files中sqlserv ...
- 在Windows2008下安装SQL Server 2005无法启动服务的解决办法
在Windows2012下安装SQL Server 2005无法启动服务的解决办法 1.正常安装任一版本的SQL Server 2005. 2.安装到SqlServer服务的时候提示启动服务失败 此 ...
- keepalived启动后报错:(VI_1): received an invalid passwd!的解决办法
一.配置好keepalived.conf文件后,启动keepalived,查看/var/log/message日志报错: [root@push-- sbin]# tail -f /var/log/me ...
- Server Tomcat v7.0 Server at localhost failed to start解决办法
今晚搞了下tomcat,在调试的时候发现报了这样一个错误Server Tomcat v7.0 Server at localhost failed to start 首先,确认了端口号8080是不是被 ...
- sql server 2008 评估期已过期解决办法
开始-->所有程序-->Microsoft SQL Server 2008-->配置工具-->SQL Server 安装中心-->维护-->版本升级,接着按照提示一 ...
- macOS下加载动态库dylib报"code signature invalid"错误的解决办法
一.现象描述 在macOS上搞开发也有一段时间了,也积攒了一定的经验.然而,今天在替换工程中的一个动态库时还是碰到了一个问题.原来工程中用的是一个静态库,调试时发现有问题就把它替换成了动态库.这本来没 ...
随机推荐
- python中的json和pickle
author:headsen chen date::2018-04-10 09:56:54 json模块和pickle模块: 这是用于序列化的两个模块: 概念介绍:json和pickle模块是将数据 ...
- 【BZOJ4540】[Hnoi2016]序列 莫队算法+单调栈
[BZOJ4540][Hnoi2016]序列 Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,a ...
- iOS 计算时间差
/** * 计算指定时间与当前的时间差 * @param compareDate 某一指定时间 * @return 多少(秒or分or天or月or年)+前 (比如,3天前.10分钟前) */ +(NS ...
- 《从零开始学Swift》学习笔记(Day60)——Core Foundation框架
原创文章,欢迎转载.转载请注明:关东升的博客 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风 ...
- oracle的order by decode根据文字自定义排序的例子
oracle的order by decode根据文字自定义排序的例子: order by decode(t.title, '当前生效预警', 1, '今日即将生效', 2, '明日预计生效', 3, ...
- Openstack使用NFS作为后端存储
续:Openstack块存储cinder安装配置 接上使用ISCSI作为后端存储,使用NFS作为后端存储配置 参考官方文档:https://wiki.openstack.org/wiki/How_to ...
- 解决----------“win10,不能打字了,已禁用IME”
登录Windows 10系统桌面后,右键点击左下角的开始菜单图标,然后在弹出菜单中选择“计算机管理”菜单项在打开的“计算机管理”窗口中,找到左侧系统工具下的“任务计划程序”菜单项点击任务计划程序前面的 ...
- delphi ---break,exit,continue等跳出操作的区别
1.break 强制退出最近的一层循环(注意:只能放在循环里:而且是只能跳出最近的一层循环),用于从for.while.repeat语句中强制退出 2.continue 用于从for.while.re ...
- 全球第一张中文网络协议分析图——By 成都科来软件
网上内容比较全面的网络协议图并不是很多,这些网络协议图大多只遵循OSI,对于TCP/IP基本不支持,有些协议图表示也不够准确.另一方面,现在网上能找到的协议图全都是英文版本,使用起来不是很方便.国内的 ...
- SQL2000查看表的大小
SQL2000查看表的大小 标签: sqlsql server数据库报表tableinsert 2011-06-08 11:47 4013人阅读 评论(0) 收藏 举报 SQL2000查看表的大小 本 ...