mongodb操作之mongoose

/**
 * Created by chaozhou on 2015/10/6.
 */
var mongoose = require("mongoose");
var db = mongoose.createConnection("127.0.0.1", "cms");

//链接错误监听
db.on("error", function (error) {
    console.log(error);
});

//Schema结构
var userSchema = new mongoose.Schema({
    userName: {type: String, default: '匿名用户'},
    trueName: mongoose.Schema.Types.String,
    title: {type: String},
    content: {type: String},
    time: {type: Date, default: Date.now()},
    age: {type: Number}
});

//添加实例方法
userSchema.methods.findByUserName = function (userName, callBack) {
    return this.model("user").find({userName: userName}, callBack);
};

//添加静态方法,静态方法在model层就能使用
userSchema.statics.findByTitle = function (title, callBack) {
    return this.model("user").find({title: title}, callBack);
};

//model层
var userModel = db.model("user", userSchema);

//entity层
var doc = {userName: 'entity_demo_username', title: 'entity_demo_title', content: 'entity_demo_content'};
var userEntity = new userModel(doc);
//添加记录,基于entity的操作方式
userEntity.save(function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log("saved ok");
    }
});

//增加记录,基于model的操作方式
var doc2 = {username: 'model_demo_username', title: 'model_demo_title', content: 'model_demo_content'};
userModel.create(doc2, function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log("saved ok");
    }
    db.close(); //关闭数据库链接
});

//修改记录,args:conditions, update, options, callback
userModel.update({userName: 'model_demo_username'}, {
    $set: {
        age: 27,
        title: 'model_demo_title_update'
    }
}, {upsert: false}, function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log("update ok");
    }
    db.close();
});

//查询,基于实例方法的查询
userEntity.findByUserName('model_demo_username', function (err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
    }
    db.close();
});

//查询,基于静态方法的查询
userModel.findByTitle('model_demo_title', function (err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
    }
    db.close();
});

//查询,args:criteria, fields, options, callBack
userModel.find({title: 'entity_demo_title'}, {title: 1, content: 1, time: 1}, function (err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
    }
    db.close();
});

//删除记录
userModel.remove({userName: 'entity_demo_username'}, function (err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log('delete ok');
    }
    db.close();
});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

【经典示例分享】— 商城购物车设计(VS+Access)附源码

弹指一挥间,从事开发工作两年多了,工作记录文件夹不知不觉好几G了。今天分享下之前项目中用到的一个购物车示例,虽然用的技术比较老(拖放控件DataGview),我...

942
来自专栏大内老A

WCF后续之旅(6): 通过WCF Extension实现Context信息的传递

在上一篇文章中,我们讨论了如何通过CallContextInitializer实现Localization的例子,具体的做法是将client端的culture通...

1857
来自专栏会跳舞的机器人

Spring Cloud(5)——熔断器

Hystrix熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

743
来自专栏iOS技术

YYWebImage 源码剖析:线程调度与缓存策略

在 iOS 开发中,异步网络图片下载框架可以说是很大的解放了生产力,通常情况下开发者只需要简单的代码就能将网络图片异步下载并显示到手机屏幕上,并且还带有缓存优化...

924
来自专栏IT进修之路

原 荐 Spring Boot 多库分布式事

1676
来自专栏Java与Android技术栈

构建一个给爬虫使用的代理IP池总结

做网络爬虫时,一般对代理IP的需求量比较大。因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制。这样我们在爬取网站时就需要很多代理I...

681
来自专栏IT笔记

SpringBoot开发案例之整合mail发送服务

? spring-boot-mail.jpg 记得上个月做过这样一篇笔记,微服务架构实践之邮件通知系统改造。 当时用的是开源的第三方插件mail和Thymel...

3197
来自专栏菩提树下的杨过

@Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法

上午花了大半天排查一个多数据源主从切换的问题,记录一下: 背景: 项目的数据库采用了读写分离多数据源,采用AOP进行拦截,利用ThreadLocal及Abstr...

3158
来自专栏Hongten

Cannot create PoolableConnectionFactory (Communications link failure)--Connection refused: connect

 我知道是连接数据库的时候出现了错误,我检查了我的tomcat的配置文件context.xml文件

601
来自专栏IT笔记

SpringBoot开发案例之整合mail发送服务

当时用的是开源的第三方插件mail和Thymeleaf做发送服务,显然这样子你需要配置一些东西,麻烦!!!接触了Spring Boot以后,显然有更好的解决方案...

48411

扫码关注云+社区