`
357029540
  • 浏览: 737179 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

MongoDB学习笔记之Mongoose的使用

阅读更多

摘自http://blog.csdn.net/sinat_25127047/article/details/50560167

**

MongoDB的介绍

** 
在说MongoDB数据插入操作之前,我们先来简单了解下它的数据逻辑结构。 
MongoDB的逻辑结构是一种层次结构,主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。 
文档(document):由键/值对构成,像{a:1};{s:”abc”}等,它是MongoDB核心单元,MongoDB的文档(document),相当于关系数据库中的一行记录。 
集合(Collection):多个文档组成一个集合(collection),相当于关系数据库的表。 
数据库(database):多个集合(collection),逻辑上组织在一起,就是数据库(database)。

一个MongoDB实例支持多个数据库(database)。

安装及引用

安装

npm install mongoose

引用mongoose

var mongoose = require(“mongoose”);

使用mongoose链接数据库

var db = mongoose(“mongodb://user:pass@localhost:port/database”);

示例

var mongoose = require(“mongoose”); 
var db = mongoose.connect(“mongodb://127.0.0.1:27017/test”); 
db.connection.on(“error”, function (error) { 
console.log(“数据库连接失败:” + error); 
}); 
db.connection.on(“open”, function () { 
console.log(“——数据库连接成功!——”); 
});

MongoDB基础

Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

Entity : 由Model创建的实体,他的操作也会影响数据库

Schema 
Schema —— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架。 
定义

 

var mongoose = require("mongoose")
var TestSchema = new mongoose.Schema({
    name : {type:String},
    age : {type:Number,default:0},
    time : {type:Date,default:Date.now},
    emial : {type:String,default:''}
});

 基本属性类型有:字符串、日期型、数值型、布尔型(Boolean)、null、数组、内嵌文档等

 

Model 
Model —— 由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类。

 

var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
// 通过Schema创建Model
var TestModel = db.model("test1", TestSchema);

 数据库中的集合名称,当我们对其添加数据时如果test1已经存在,则会保存到其目录下,如果未存在,则会创建test1集合,然后在保存数据。

 

Entity 
Entity —— 由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。

 

var TestEntity = new TestModel({
    name : "Lenka",
    age : 36,
    email : "lenka@qq.com"
});
console.log(TestEntity.name); // Lenka
console.log(TestEntity.age); // 36

 **

 

示例1

** 
数据库的连接,Schemal的创建,模型的创建,实体的创建,通过实体保存数据库信息。

 

var mongoose = require("mongoose");
var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
var TestSchema = new mongoose.Schema({
    name : {type:String},
    age : {type:Number,default:0},
    email : {type:String},
    time : {type:Date,default:Date.now}
});
var TestModel = db.model("test1",TestSchema); //'test'相当于collection
var TestEntity = new TestModel({
    name:'helloworld',
    age:28,
    emial:'helloworld@qq.com'
});
TestEntity.save(function(err,doc){
    if(err){
        console.log("error :" + err);
    } else {
        console.log(doc);
    }
});

 

 

 

 

示例2

通过entity、model来完成数据库的增删查改。 
// mongoose 链接

 

var mongoose = require('mongoose');
var db       = mongoose.createConnection('mongodb://127.0.0.1:27017/test');

 Schema 结构

 

 

var mongooseSchema = new mongoose.Schema({
    username : {type : String, default : '匿名用户'},
    title    : {type : String},
    content  : {type : String},
    time     : {type : Date, default: Date.now},
    age      : {type : Number}
});

 

// 添加 mongoose 实例方法
mongooseSchema.methods.findbyusername = function(username, callback) {
    return this.model('mongoose').find({username: username}, callback);
}
// 添加 mongoose 静态方法,静态方法在Model层就能使用
mongooseSchema.statics.findbytitle = function(title, callback) {
    return this.model('mongoose').find({title: title}, callback);
}

 相当于Schemal是一个构造函数,在这里可以添加方法findbyuseraname()和findbytitle

 

model结构

 

var mongooseModel = db.model('mongoose', mongooseSchema);

 我理解为在test数据库下面创建了mongoose collection的连接

 

Entity结构

 

//增加操作
var doc = {username : 'emtity_demo_username', title : 'emtity_demo_title', content : 'emtity_demo_content'};
var mongooseEntity = new mongooseModel(doc);
mongooseEntity.save(function(error) {
    if(error) {
        console.log(error);
    } else {
        console.log('saved OK!');
    }
    // 关闭数据库链接
    db.close();
});

 

//查询操作
var mongooseEntity = new mongooseModel({});
mongooseEntity.findbyusername('model_demo_username', function(error, result){
    if(error) {
        console.log(error);
    } else {
        console.log(result);
    }
    //关闭数据库链接
    db.close();
});

 基于model的增加、修改与查询

 

 

// 增加记录 基于model操作
var doc = {username : 'model_demo_username', title : 'model_demo_title', content : 'model_demo_content'};
mongooseModel.create(doc, function(error){
    if(error) {
        console.log(error);
    } else {
        console.log('save ok');
    }
    // 关闭数据库链接
    db.close();
});

 

//修改记录
//mongooseModel.update(conditions, update, options, callback);
var conditions = {username : 'model_demo_username'};
var update     = {$set : {age : 27, title : 'model_demo_title_update'}};
var options    = {upsert : true};
mongooseModel.update(conditions, update, options, function(error){
    if(error) {
        console.log(error);
    } else {
        console.log('update ok!');
    }
    //关闭数据库链接
    db.close();
});

 

// mongoose find
var criteria = {title : 'emtity_demo_title'}; // 查询条件
var fields   = {title : 1, content : 1, time : 1}; // 待返回的字段
var options  = {};
mongooseModel.find(criteria, fields, options, function(error, result){
    if(error) {
        console.log(error);
    } else {
        console.log(result);
    }
    //关闭数据库链接
    db.close();
});

 

// 删除记录
var conditions = {username: 'emtity_demo_username'};
mongooseModel.remove(conditions, function(error){
    if(error) {
        console.log(error);
    } else {
        console.log('delete ok!');
    }

    //关闭数据库链接
    db.close();
});

 基于实例方法的查询

 

前面说到findbyusername()在schemal层定义,相当于实例化,然后继承findbyusername()方法

 

var mongooseEntity = new mongooseModel({});
mongooseEntity.findbyusername('model_demo_username', function(error, result){
    if(error) {
        console.log(error);
    } else {
        console.log(result);
    }
    //关闭数据库链接
    db.close();
});

 基于静态方法的查询

 

静态方法可以直接在模型层调用

 

// 基于静态方法的查询
mongooseModel.findbytitle('emtity_demo_title', function(error, result){
    if(error) {
        console.log(error);
    } else {
        console.log(result);
    }
    //关闭数据库链接
    db.close();
});

        我们在连接mongodb的时候,明明在数据库中有数据却无法查询出来,这个就有可能是我们在建立model的时候需要指定collections才能查询出来,如

mongodb.mongoose.model("user", user,"user");

 第三个user就是我们的collections的名字

 

  • 大小: 3.2 KB
  • 大小: 5.1 KB
分享到:
评论

相关推荐

    MongoDB学习笔记之MapReduce使用示例

    MongoDB的MapReduce是一个强大的工具,它允许开发者处理和聚合大量数据。MapReduce基于一种分布式计算模型,将大规模数据处理任务分解为两...在某些情况下,更推荐使用MongoDB的聚合框架,它通常更快且更适合实时分析。

    一些NodeJS和前端的学习笔记,Koa+MongoDB+MySQL+JavaScript+Bootstrap+Re.zip

    综合这些技术,学习笔记可能会讲解如何使用Node.js(Koa)构建Web服务器,MongoDB和MySQL的数据库操作,JavaScript的后端和前端应用,以及如何利用Bootstrap和React构建用户友好的交互界面。这些笔记对于想要深入...

    ngotes:使用MongoDB的笔记站点

    【ngotes: 使用MongoDB...通过以上知识点的学习和实践,开发者可以有效地利用MongoDB构建像Ngotes这样的笔记站点,提供高效、可靠的笔记存储和检索服务。同时,结合JavaScript的灵活性,可以实现丰富的功能和交互体验。

    项目之文章管理系统nodeJS_mogonDB学习笔记及源码.zip

    这个过程中涉及的知识点包括Node.js基础、Express框架的应用、MongoDB的使用、Mongoose的数据模型、以及前后端交互的实现。实践中,不断优化代码结构,提升用户体验,将是构建优秀文章管理系统的关键。

    Express+Mongoose课件、笔记、资料、代码及数据库.zip

    在本压缩包“Express+Mongoose课件、笔记、资料、代码及数据库.zip”中,主要涉及了两个关键的技术:Express.js和Mongoose,以及它们与MongoDB数据库的结合使用。MongoDB是一个流行的NoSQL数据库,它以JSON格式存储...

    Nodejs开发的学习笔记.rar

    11. MongoDB与Mongoose:介绍如何与MongoDB数据库交互,使用Mongoose作为对象数据模型(ODM)。 12. 数据库操作:展示增删查改(CRUD)操作的实现,包括查询优化和数据验证。 五、异步编程 13. Promises和async/...

    Keeper_Node_Reactjs:NodeJS,ReactJS,MongoDB,Mongoose,Axios(谷歌保持克隆)

    Keeper_Node_Reactjs项目是一个基于JavaScript技术栈的Web应用程序,主要使用了Node.js后端框架、React.js前端库、MongoDB数据库以及Mongoose和Axios这两个重要的库。这个项目是Google Keep克隆版,旨在帮助用户创建...

    前端学习笔记-Node.js

    1. **MongoDB**:学习使用Mongoose库操作MongoDB,包括连接数据库、创建模型、CRUD操作。 2. **SQL数据库**:通过Sequelize或TypeORM等库,学习在Node.js中操作MySQL、PostgreSQL等SQL数据库。 **Node.js框架** 1....

    mysql入门教程.zip

    原本我是使用 MongoDB 这类型的 NoSQL 数据库,MongoDB在 Nodejs 在 Mongoose 包的帮助下 JSON 的数据格式直接插入 MongoDB 中,对于一个前端开发工程师,使用起来非常舒服。但是没有办法,我是被逼的,从此入了一个...

    ios学习笔记二--电影网

    在本“ios学习笔记二--电影网”的教程中,我们将深入探讨如何使用Node.js和Express框架构建一个简单的在线电影数据库。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使得开发者能够在服务器端使用...

    Node+Express+Mongoose车展项目入门到实战课件、笔记、资料、代码及数据库.zip

    本课程主要围绕“Node.js+Express+Mongoose”这一技术栈,通过构建一个完整的车展项目,带领学习者从基础...通过这个项目,学习者不仅可以掌握Node.js、Express和Mongoose的使用,还能提升项目管理和团队协作的经验。

    Up and Running with Node.js学习笔记

    ### Up and Running with Node.js 学习笔记 #### 在线学习了“up and running with Node.js”,做了一些笔记,适合入门。 **Node.js** 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发人员能够在...

    MongoDB的安装方法图文教程

    为了进一步学习和理解MongoDB,建议查阅相关的入门教程和配置指南,如文中提到的“MongoDB的安装及配置文件选项全解”、“MongoDB快速入门笔记”等资源,这些都能帮助你更好地掌握MongoDB的使用技巧和最佳实践。

    nodejs学习笔记

    Node.js可以使用如MongoDB、MySQL等数据库,通过ORM(对象关系映射)库如Sequelize或Mongoose简化操作。 5. **路由(Routing)**:Express中的路由定义了HTTP请求与处理函数之间的映射。例如,`app.get('/cart', (req...

    studyFiles:一些NodeJS和前端的学习笔记,Koa + MongoDB + MySQL + JavaScript + Bootstrap + React + jQuery等

    了解SQL语言基础以及如何在Node.js中连接和查询MySQL数据库是学习笔记的重点之一。 【JavaScript】 JavaScript是Web开发的基础,用于实现客户端的动态交互效果。在Node.js环境中,JavaScript也用于后端编程,实现了...

    NodeJS第7天笔记1

    总结,NodeJS第7天的学习笔记主要是关于Node.js与MongoDB的集成,特别是通过Mongoose进行数据库操作,以及利用EJS模板引擎在后端与前端之间传递数据。理解并熟练掌握这些技能,对于构建基于Node.js的Web应用至关重要...

    nodejs-learning-guide, Nodejs学习笔记以及经验总结.zip

    数据库集成是Node.js应用的常见需求,如MongoDB(通过Mongoose库)、MySQL(通过mysql2库)或PostgreSQL(通过pg库)。这部分内容可能包括连接数据库、查询数据、事务处理等。 除此之外,你可能还会接触到WebSocket...

    nodejs应用开发实践笔记

    - MongoDB集成:通过Mongoose库连接MongoDB,进行数据模型设计和CRUD操作。 - MySQL连接:使用mysql2库连接MySQL数据库,执行SQL语句。 - ORM(对象关系映射):了解Sequelize等ORM框架,简化数据库操作。 6. **...

    cnote:NodeJS+MongoDB完成的一个简单的记事本项目

    【标题】:“cnote:...这个项目是学习Node.js、MongoDB以及它们如何协同工作的良好实践案例。它涵盖了服务器端编程、数据库操作、路由处理和基本的前端交互等多个方面,对于提升JavaScript全栈开发技能非常有价值。

    NodeJS第4天 笔记1

    本篇笔记主要针对NodeJS的学习,特别是其在NoSQL数据库,特别是MongoDB的运用,适用于需要灵活性强、数据库性能要求高且不要求高度数据一致性的环境。 一、传统数据库技术回顾 传统的数据库系统,如关系型数据库...

Global site tag (gtag.js) - Google Analytics