当前位置: 首页 > 工具软件 > mongoskin > 使用案例 >

第5章-MongoDB、Mongoskin特性-5.5.Mongoskin的主要方法介绍

萧光华
2023-12-01

Mongoskin比MongoDB的原生驱动提供更好的API。像之前那样,在NPM上安装一个模块

$npm install mongoskin@0.6.1

和数据库的连接

var mongoskin = require('mongoskin'),
  dbHost = '127.0.0.1',
  dbPort = 27017;

var db = mongoskin.db(dbHost + ':' + dbPort + '/local', {safe:true});

我们可以创建自己的数据集合的方法。这对于通过合并app逻辑到自定义方法中来实现MVC-like架构很有用:

db.bind('messages', {
  findOneAndAddText : function (text, fn) {
    db.collection('messages').findOne({}, function(error, item){
      if (error) {
        console.error(error);
        process.exit(1);
      }
      console.info("findOne: ", item);
      item.text = text;
      var id = item._id.toString(); // 可以把ID存成字符串
      console.info("before saving: ", item);
      db.collection('messages').save(item, function(error, count){
        console.info("save: ", count);
        return fn(count, id);
      });
    })
  }
});

最后,用最简洁的方式(大概其他地方也会用到)调用自定义方法:

db.collection('messages').findOneAndAddText('hi', function(count, id){
    db.collection('messages').find({
      _id: db.collection('messages').id(id)
    }).toArray(function(error, items){
      console.info("find: ", items);
      db.close();
      process.exit(0);
    });
});

Mongoskin是MongoDB的Node.js版原生驱动的子集,因此后面所有的方法在前面都是可用的。
Mongoskin主要方法列表:
1.findItems(…, callback):查找元素并返回一个数组替代指针
2.findEach(…, callback):遍历每个查找到的元素
3.findById(_id, …, callback):通过_id格式化字符串查找
4.updateById(_id, …, callback):更新匹配_id的元素
5.removeById(_id, …, callback):删除匹配_id的元素

可供选择的MongoDB原生驱动和Mongoskin包括如下内容:
1.mongoose:支持建模的可配置的异步JavaScript驱动
2.mongolia:轻量级的MongoDB ORM/驱动
3.monk:一个提供方便的极小的层,可用来使用Node.js编码改善MongoDB

以下这些模块常用来进行数据验证。
1.mode-validator:验证数据
2.express-validator:在Express.js 3/4中验证数据

敏捷开发:
我们可以创建Bash种子数据脚本db/seed.sh使这步自动化:
seed.sh文件内容如下:

mongoimport --db blog --collection users --file ./db/users.json --jsonArray
mongoimport --db blog --collection articles --file ./db/articles.json --jsonArray

这个脚本利用了MongoDB的mongoimport特性,可以通过JSON文件直接将数据便捷地插入到数据库。
users.json文件包含了授权用户的信息:

[{
  "email": "374452668@qq.com",
  "admin": true,
  "password": "1"
}]

articles.json文件保存了博客文章内容:

[{
  "title": "Node is a movement",
  "slug": "node-movement",
  "published": true,
  "text": "在一个随机部署,它通常假定的散射传感器的数目是超过所需的临界传感器密度。否则,该部署可能无法保证完整的区域覆盖范围,并可能存在一些覆盖孔。除了使用更多的传感器,以提高覆盖率,移动传感器节点可以用来改善网络覆盖。移动传感器节点都配备了移动平台,可以在初始部署前后移动。虽然移动传感器节点通常比固定的同辈更昂贵的,它可以提供许多功能,提高网络覆盖率。节点运动策略的设计通常需要解决以下问题:在哪里移动和如何有效地移动移动模式,使区域覆盖可以优化?“在不同的网络环境下,节点的运动的目标是不同的。在固定和移动传感器节点组成的混合网络中,目标是主要搬迁移动节点愈合的固定节点造成的覆盖孔。在移动网络中只包括移动节点,主要目标是最大限度地提高这些移动节点的覆盖率,并在事件监测方案,一个重要的目标是派遣移动节点的事件的来源,更好的事件覆盖。"  
}, {
  "title": "Express.js Experience",
  "slug": "express-experience",
  "published": false
  "text": "Work in progress",
},{
  "title": "Node.js FUNdamentals: A Concise Overview of The Main Concepts",
  "slug": "node-fundamentals",
  "published": true,
  "text": "Node.js是一个高效的、可扩展的非阻塞I/O的平台,是建立在顶部的谷歌浏览器V8引擎和ECMAScript。这意味着,最前端的JavaScript(另一个实现ECMAScript)对象,函数和方法在Node.js是可用的。如果你需要在JS具体温习基础知识参考JavaScript基础。"
  }]

在项目目录下执行$ ./db/seed.sh,即可构建seed数据

 类似资料: