mongodb连接失败_mongodb 数据库及数据分页

本文转载于 SegmentFault 社区作者:小小蚊子
    在做自己的一个小项目时,新学习了 mongodb非关系型数据库,使用了 mongoose封装好的查询方法,包括数据库分页用到的limit和 skip 方法,这里记录下。

  

mongodb 数据库连接

参照官网文档对应的参数如下:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
使用 mongoose进行数据库的连接:
const dataBaseUrl = config.admin.username
? `mongodb://${config.admin.username}:${config.admin.pwd}@${config.host}/share-resource`
: `mongodb://${config.host}/share-resource`;
mongoose.connect(dataBaseUrl, { useNewUrlParser: true });
若出现警告信息:要求使用新的编译方式,则在连接的时候加上 useNewUrlParser: true
DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version.
To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
mongoose.connect(dataBaseUrl, { useNewUrlParser: true });
在连接数据库时,对连接操作进行监听处理
mongoose.connection.on('connected', function() {
console.log('Mongoose connection open to ' + dataBaseUrl);
});
/* 连接数据库异常 */
mongoose.connection.on('error', function(err) {
console.log('Mongoose connection error:' + err);
});
/* 连接数据库断开 */
mongoose.connection.on('disconnected', function() {
console.log('Mongoose connection disconnected');
});

数据类型

数据类型 (mongoose 中提供的 schemaTypes)数据类型有:String,Number,Date,Buffer,Boolean,ObjectId,Array,Mixed,Map,Decimal128在数据库直接用 insert 方法进行数据插入时,若不强制指定数字的类型,则默认是插入double型数字。

mongoose 对数据库操作的方法

3.1 数据的插入

先要新建 schema文件
const mongoose = require('../database/mongodbHelper');
const Message= mongoose.Schema;
const RecordModel = new Message({
message: String,
name: String,
num: Number,
},{
versionKey: false
});
module.exports = mongoose.model('using_records', RecordModel);
在使用 schema对进行数据的插入时,若直接插入,则会在新的集合中多出一个_v字段,这个代表的是集合的版本号,可以在 schema中加入versionKey: false来删除 _v字段数据插入:使用 save方法
const record= new Record({
message: req.body.message,
name: req.body.name,
num: req.body.num,
});
record.save((err, docs) => {
if (err) {
res.send({ 'status': -1, 'msg': '插入失败' });
} else {
res.send({ 'status': 200, 'msg': '插入成功', 'result': ''});
}
});

3.2 数据的查询

使用find 方法
record.find((err, docs) => {
if (err) {
res.send({ 'status': -1, 'msg': '参数错误' });
} else {
res.send({ 'status': 200, 'msg': '查询成功', 'result': docs});
}
});

3.3 数据的更新

更新一条数据:updateOne
/* 第一个参数为查询参数,第二个为要更新的内容,第三个为回调方法 */
record.updateOne({_id: id}, updateInfo, (err, doc) => {
if(err) {
res.send({'status': -1, 'msg': '更新失败', 'result': ''});
} else {
res.send({'status': 200, 'msg': '更新成功', 'result': ''});
}
})
更新多条数据:updateMany
record.updateMany({user_info: {$elemMatch: {user_id: userId, status: 1, is_delete: 1}}}, {$set: {'user_info.$.is_delete': 3}}, (err, doc) => {
if(err) {
res.send({'status': -1, 'msg': '参数错误'});
} else {
res.send({'status': 200, 'msg': '清空成功'});
}
})

3.4 数据的删除

/* 第一个为要删除的内容的参数 */
record.findOneAndDelete({_id: req.body.id}, (err, doc) => {
if(err) {
res.send({'status': -1, 'msg': '删除失败'});
} else {
res.send({'status': 200, 'msg': '删除成功'});
}
})

   

数据库的分页操作

数据库的分页操作(limit 和 skip 方法)limit()方法为限制数据库每次查询的数据条数;skip(param) 跳过 param 条数据不查询。
/* page: 页码;pagesize: 每页的数量 */
let page = req.body.page;
let pagesize = req.body.pagesize;
let queryResult = collection.find(queryCondition).limit(pageSize).skip((page - 1) * pageSize).sort({'_id': -1});
queryResult.exec((err, value) => {
if(err) {
reject(err);
} else {
resolve({total, value});
}
})

匹配数据

匹配数据中的数组里的某个对象里的某个字段,使用 $set 来设置对应的值
$set: {'user_info.$.status': 1}
$elemMat 只匹配第一条数据,当数组里存在多条一样的数据时,只返回第一条数据
let arr = [
{
is_delete: 1,
name: 'a'
},
{
is_delete: 1,
name: 'b'
}
]
{$elemMatch: {is_delete: 1}}只匹配arr的第一条数据
aggregate 匹配多条数据
/* aggregate聚合操作,$unwind将数组拆分成单个元素
* $group 分组依据
* $sum 统计
* $project 将返回值进行筛选,是否返回筛选完后的某个字段
* */
message.aggregate([
{
$match: {
'user_info.user_id': id,
'user_info.is_delete': 0
}
},
{
$unwind: '$user_info'
},
{
$group: {
_id: {status: '$user_info.status',},
count: {$sum: 1}
}
},
{
$project: {
'_id': 0,
'status': '$_id.status',
'count': 1
}
}
]).then()
对于匹配数组里的某项中的某个字段
/* aggregate聚合操作,$unwind将数组拆分成单个元素
* $group 分组依据
* $sum 统计
* $project 将返回值进行筛选,是否返回筛选完后的某个字段
* */
message.aggregate([
{
$match: {
'user_info.user_id': id,
'user_info.is_delete': 0
}
},
{
$unwind: '$user_info'
},
{
$group: {
_id: {status: '$user_info.status',},
count: {$sum: 1}
}
},
{
$project: {
'_id': 0,
'status': '$_id.status',
'count': 1
}
}
]).then()
对对象中的数组进行插入数据操作
let arr = [
{
is_delete: 1,
name: 'a'
},
{
is_delete: 1,
name: 'b'
}
]
/* 匹配arr中的name */
$match: {
'arr.name': 'a'
}
/* 分组筛选 */
$ group: {
_id: {name: '$arr.name'}
}
 - END -641b6f42b61f7c9a270199aeb408b6a9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 去除空格和换行,删除空格和换行符-BeautifulSoup Python

使用Beautifulsoup,我正在抓取以下Web源:Manchester Citys Fabian Delph limped off in the first minute of England Euro 2016 qualifier against Switzerland with a suspected hamstring injury. The 25-year-old midfielder, who signed for City f…

Windows MobileCE 开发书籍大全

1、《Microsoft Windows CE 程序设计》 北京大学出版社[美]Doudlas Boling 著该书可以与经典著作《Microsoft Windows 程序设计》相媲美,就象要想在Window平台上开发,必看 《Microsoft Windows 程序设计》一样,如果你想在Windows CE平台上开发…

python自动答题助手_GitHub - SmileSmith/autoAnswer: 客户端答题工具,集成3个答题助手,包含AI自动答题,手动答题,adb控制多台手机等...

autoAnswer和简单搜索、汪仔助手、UC答题助手一起答题。支持AI自动答题,支持个性化题。注:近期各个答题助手都升级了安全策略,如有问题请随时反馈 ~ ~**AI自动答题的详细流程说明请打开(见图)AI自动答题的结果预览(见图)答题界面见预览&#…

php ajax json post请求参数传递,javascript - ajax post 有个请求参数要用json 但请问js怎么转json的?...

$.ajax({url: linkAndBindUrl,method: post,data: {key: "web",toKen: toKen,memberId: memberId,json:, //[{"id":1,"appellation":"爸爸"},{"id":2,"appellation":"爷爷"}],beMemberId: beMemberId},…

创建数据类的原则

转载于:https://www.cnblogs.com/ghostbox/archive/2009/08/03/2251083.html

mysql 关联查询_Mysql查询优化器,再也不会因为该什么时候建立索引发愁了

优化器的作用:我们知道,一条SQL语句,可以有很多执行方式,最后都返回相同的结果,而优化器的作用就是找到最好的执行计划。一、RBO-基于规则的优化器(rule)系统内置的一套硬编码规则,根据规则生成执行计划&am…

购物车的收货地址js php,Javascript实现购物车功能的详细代码

我们肯定都很熟悉商品购物车这一功能,每当我们在某宝某东上购买商品的时候,看中了哪件商品,就会加入购物车中,最后结算。购物车这一功能,方便消费者对商品进行管理,可以添加商品,删除商品&#…

CLI下的网页浏览器之二——Lynx

出自:http://vb2005xu.javaeye.com/blog/230044 Lynx浏览器使用指南 Lynx是一个字符界面下的全功能的WWW浏览器。Lynx 可以运行在很多种操作系统下,如VMS, UNIX, Windows 95, Windows NT等,当然也包括Linux。 由于没有漂亮的图形界面&#xf…

python中减法运算函数_详解 Python 的二元算术运算,为什么说减法只是语法糖?...

原题| Unravelling binary arithmetic operations in Python作者| Brett Cannon译者| 豌豆花下猫(“Python猫”公众号作者)声明| 本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议。为便于阅读,内容略有改动。大家对我解读属性访问的博客文章反…

【SQL】DQL语句影响行数不能超过XX值

mysql执行临时查看添加limit 10 查询 select * from msg_info cc WHERE DATE_FORMAT(cc.CREATE_DATE,%Y%m%d) 20231127;> 1025 - [xx_dql_where]DQL语句需要增加where条件;[xx_dql_explain]DQL语句影响行数不能超过20000,当前值180906; > 时间: 0.021s处理 select * …

Oracle访问同义词连接超时,利用同义词解决oracle用户访问其它schema的对象

由于应用需要,aa能访问bb的所有表。SQL> create user aa identified by oracle;User created.SQL> grant connect,resource to aa;Grant succeeded.SQL> create user bb identified by oracle;User created.SQL> grant connect,resource to bb;Grant su…

一个不错的讲解flex 3中自定义事件的文章

一个不错的讲解flex 3中自定义事件的文章 http://wangyisong.javaeye.com/blog/376118,一个不错的讲解flex 3中自定义事件的文章posted on 2009-08-08 17:41 jackyrong的世界 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/jackyrong/archive/2009…

oracle同义,oracle同义词

搞了几天数据同步的程序,写完之后觉得很浪费,因为oracle自身的数据库联机备份功能已经相当强大。不过关键一点是我们应用场景跟联机备份有很大差别。虽然这次没用上oracle自身备份功能,但是有一个通过建立db link 来实现同步倒也很简单&#…

stm32 整数加法循环时间_【教学设计】小数加法教学设计

小数加法教学设计刘秀锦舞钢市特殊教育学校教材分析本节课是第四单元“小数加减法”的第一课时,小数加减法是以整数加减法为基础进行教学的,本节课走踏实了,后边的知识才能顺利的进行下去,所以本节课还是以小步走、学一点、练一点…

调用WindowsAPI显示帮助提示

导言 前一段时间,在编写程序的过程中,需要一个帮助功能按钮。这个按钮众所周知,按下按钮以后,鼠标变成带有问号的鼠标,然后点击画面上的控件,然后就回出现一个提示的文本,该处是什么含意。就好像…

python整形魔法_python 魔法方法

1、什么是魔法方法?魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自…

oracle正则匹配全部,sql – 返回Oracle中正则表达式的所有匹配项

您已经提供了数据样本,说明这是一行,但已将其显示为两个不同的行.所以这个例子基于你的话.-- Sample of data from your question extra row for the sake of demonstration-- id column is added to distinguish the rows(I assume you have one)with t1(id, col) as(select …

hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些

hashtable里存的对象全部是object类型 ,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,hashtable对存入的类型没有限制 , 因此在读取转换类型时容易出错, dictionary只能存入定义时指定的类型,而且不像hashtable会把类型转换成object,存取起来比前者方便,效率更…

riak php7,Laravel中服务提供者的register和boot分别是干什么

register方法正如前面所提到的,在register方法中只绑定事物到服务容器,而不要做其他事情,否则,一不小心就能用到一个尚未被加载的服务提供者提供的服务。现在让我们来看看一个基本的服务提供者长什么样:namespace AppP…

天锐绿盾解密_天锐绿盾数据防泄密系统

天锐绿盾数据防泄密系统(简称数据防泄密系统)是一套从源头上保障数据安全和使用安全的软件系统。包含了文件透明加解密、内部文件流转、密级管控、离线管理、文件外发管理、灵活的审批流程、工作模式切换、服务器白名单等功能,并全面覆盖Mac、…