mongodb @aggregation 返回字段映射不上_如何在 nodejs 中使用 MongoDB 数据库

MongoDB是什么?

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB有什么特点?

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • 文件存储格式为BSON(一种JSON的扩展)。
  • 可通过网络访问。

更多介绍

mongodb https://www.npmjs.com/package/mongodb github项目地址 https://github.com/mongodb/node-mongodb-native 属于官方提供的mongodb驱动 文档 http://mongodb.github.io/node-mongodb-native/3.1/api/ 项目主页 http://mongodb.github.io/node-mongodb-native/ 属于一个轮子,已经造好了

node 中如何连接 MongoDB 数据库

1、使用 MongoDB 官方出品的 npm 包来连接 Mongodb // ps: 很繁琐,建议直接跳到使用 mongoose 连接。

下载安装:

npm install mongodb --save

创建数据库:

b7400b66752382e966900092fdf4d17b.png

ps: 如果它连接的数据库没有创建,则会自动创建并连接,有则直接连接该数据库。

创建数据表(集合)

bbd7b58c214291c2fdfd24050b3b39ef.png

插入单条数据:

c027276afbc9471b566d5b836ea8b66d.png

插入多条数据:

29304d1f7d2e82f926bbdb8ad2254111.png

查询全部数据:

2c8156d6758bb1f69c7f92c1d4ca5830.png

查询指定条件的数据:

121a93c56ace5375661125ba8b02bded.png

更新单条数据:

fd99d9cfdd946a4fa69a502eeb802799.png

更新多条数据:

f93724a5b78f2be203767231720f0c1e.png

同上,删除则使用 deleteOne和deleteMany()。

参考博客:https://juejin.im/post/5b608c7c6fb9a04f976522dd

node 中使用 Mongoose 连接 MongoDB 数据库

安装

npm install mongoose --save

1、连接数据库

mongoose.connect(url(s), [options], [callback])//url(s):数据库地址,可以是多个,以`,`隔开//options:可选,配置参数//callback:可选,回调mongoose.connect('mongodb://数据库地址(包括端口号)/数据库名称')

Eg:

5f1dbca14384fc7bac044b422ff25628.png

ps: 指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来。

连接回调参数

aeda5bc3c4040a9bee5a906e8b70f830.png

2、建立数据表(数据集合)

Schema主要用于定义MongoDB中集合Collection里文档document的结构,可以理解为mongoose对表结构的定义(不仅仅可以定义文档的结构和属性,还可以定义文档的实例方法、静态模型方法、复合索引等),每个schema会映射到mongodb中的一个collection,schema不具备操作数据库的能力。

定义Schema非常简单,指定字段名和类型即可,支持的类型包括以下8种。

String 字符串Number 数字 Date 日期Buffer 二进制Boolean 布尔值Mixed 混合类型ObjectId 对象ID Array 数组

通过mongoose.Schema来调用Schema,然后使用new方法来创建schema(建立表结构)

var Schema = mongoose.Schemavar userSchema = new Schema({ username: { type: String, required: true // 必须有 }, password: { type: String, required: true }, email: { type: String }})

字段名称就是表结构中的属性名称。

约束的目的是为了保证数据的完整性,不要有脏数据。

如果需要在Schema定义后添加其他字段,可以使用add()方法。

f4a3301aca5f1645de1bdaa5e76a079d.png

3、将创建好的表结构发布为模型(操作数据)。

Model是由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为。Model的每一个实例(instance)就是一个documentdocument可以保存到数据库和对数据库进行操作。简单说就是model是由schema生成的模型,可以对数据库的操作。

// mongoose.model 方法就是用来将一个架构发布为 model// 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称// mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称// 例如这里的 User 最终会变为 users 集合名称// 第二个参数:架构 Schema// // 返回值:模型构造函数var User = mongoose.model('User', userSchema)

eg:

edbe4a91518e738ef6d5c263b7a1e9e0.png

此时我们就可以对数据进行增删改查啦~

增:

// var admin = new User({// username: 'zs',// password: '123456',// email: 'admin@admin.com'// })// admin.save(function (err, ret) {// if (err) {// console.log('保存失败')// } else {// console.log('保存成功')// console.log(ret)// }// })

查询:

// User.find(function (err, ret) {// if (err) {// console.log('查询失败')// } else {// console.log(ret)// }// })// User.find({// username: 'zs'// }, function (err, ret) {// if (err) {// console.log('查询失败')// } else {// console.log(ret)// }// })// User.findOne({// username: 'zs'// }, function (err, ret) {// if (err) {// console.log('查询失败')// } else {// console.log(ret)// }// })

删除:

// User.remove({// username: 'zs'// }, function (err, ret) {// if (err) {// console.log('删除失败')// } else {// console.log('删除成功')// console.log(ret)// }// })

更新:

// User.findByIdAndUpdate('5a001b23d219eb00c8581184', {// password: '123'// }, function (err, ret) {// if (err) {// console.log('更新失败')// } else {// console.log('更新成功')// }// })

mongoose 文档:http://www.mongoosejs.net/docs/index.html

真的是巨简单~,前端学 MongoDB 简直不要太容易。

比如使用mongodb实现一个半自动理财基金推送小demo:

4827f9fc94d636ef24ade38428958198.png
944263634b3c7afd2692e6dca78e5411.png
ef316a43f4cb246d9d9d86c5544496c2.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值