首页 > 语言 > JavaScript > 正文

NodeJs操作MongoDB教程之分页功能以及常见问题

2024-05-06 15:40:56
字体:
来源:转载
供稿:网友

一,方法介绍

 1,聚合操作之count

count()方法可以查询统计符合条件的集合的总数

1 db.User.count(<query>) // 此方法等价于 db.User.find(<query>).count()

在分布式集合中,会出现计算错误的情况,这个时候推荐使用aggregate;

 2,find() 方法以非结构化的方式来显示所有文档。

1 db.User.find();//相当于:select* from User;

3,exec() 方法用于检索字符串中的正则表达式的匹配。(javascript方法)

4,sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

1 升序:db.User.find().sort({CreateTime: 1});2 降序:db.User.find().sort({CreateTime: -1});

5,skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

1 db.User.find().skip(2)//跳过2条

6,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。一般与skip连用

1 # limit()中number值为空时代表全部查出2 db.User.find().limit(2) #读取的条数
1 # 常用在分页方法中2 # 查询User集合中,跳过前两条记录,每页一条记录3 > db.User.find().skip(2).limit(1)

二,封装与接口抛出

2.1,分页查询

  1,根据查询条件获取总条数,使用count({},callback)方法

/** * 根据条件获取有多少条数据 文档数 * @param table_name 表名 * @param conditions 查询条件 {a:1, b:2} * @param callback 回调方法 */MongoDbAction.getTotal = function (table_name, conditions, callback) { var node_model = this.getConnection(table_name); if (!node_model || node_model.message) { if (callback) callback(1, node_model) } else { node_model.find(conditions)  .count({})  .exec(function (err, total) {  if (err) {   if (callback) callback(err);  } else {   if (callback) callback(null, total);  }  }); }};

2,实现连写查询

 (1)这个可以用来做分页,表示获取从第1条(第1条记录序号为0)记录开始的10条记录.类似与Mysql的limit 0, 10,如下:

{ limit:10,//pageSize skip:0//page:skip+1}

(2)按某个字段升序(1)降序(-1),如下 按照创建时间进行降序排列

sort: {CreateTime: -1},

(3)代码连写查询实现:

/** * 连写查询 查询多条数据 * @param table_name 表名 * @param conditions 查询条件 {a:1, b:2} * @param options 选项:{fields: "a b c", sort: {time: -1}, limit: 10} * @param callback 回调方法 */MongoDbAction.whereCondition = function (table_name, conditions, options, callback) { var node_model = this.getConnection(table_name); if (!node_model || node_model.message) {  if (callback) callback(1, node_model) } else {  node_model.find(conditions)   .select(options.fields || '')   .sort(options.sort || {})//排序 //按某个字段升序(1)降序(-1)   .skip(options.skip || 0)//跳过的条数   .limit(options.limit || {})//查询几条   .exec(function (err, res) {    if (err) {     if (callback) callback(err);    } else {     if (callback) callback(null, res);    }   }); }};            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选