美文网首页
MongoDB-mongoose ODM的基本应用学习

MongoDB-mongoose ODM的基本应用学习

作者: RaniysLiao | 来源:发表于2017-05-12 20:47 被阅读0次

    目的

    写这篇文章主要两个目的:一是作为自己学习的记录,另一个是也许可以帮到别人。

    关于mongoose是什么的问题在网上有很多,在这里不再赘述,啰哩啰嗦的不是好程序员。

    Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
    Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
    Entity : 由Model创建的实体,他的操作也会影响数据库

    1. 引用mongoose模块
    var mongoose = require('mongoose');
    
    2. 创建一个变量Schema
    var Schema = mongoose.Schema;
    
    3. 新建Schema并配置默认参数(DB并未建立)
    var MGSessionSchema = new Schema({
        title: String,
        type: Number,
        brief: String,
        content: String,
        update_time: Date,
        create_time: Date,
        extension_data: {}
    }, {collection: 'MGSession', versionKey: false});
    

    这里创了两个参数去新建Schema,第一个参数里是配置表的字段,第二个参数里是collection(可以理解为数据库里的表)的名字,versionKey是版本锁,我这边不需要版本锁。

    4. 获取model用于数据操作(DB并未建立)
    var MGSession = mongoose.model('MGSession', MGSessionSchema);
    
    5. 建立连接(DB并未建立)
    mongoose.connect('mongodb://127.0.0.1/MGSessionDB');
    

    我的mongoDB是在本地建立的,使用默认端口27017,MGSessionDB是database的名字。这里需要注意的是:地址里我并没有写端口在地址里,这是因为mongoose有默认连接monogo的端口(27017),如下写法也是正确的:

    mongoose.connect('mongodb://127.0.0.1:27017/MGSessionDB');
    

    到这一步,数据库(MGSessionDB)并未真正建立,当然collection MGSession也是不存在的

    5. 更新数据
    var uuid = require('node-uuid'); 
    function createOrUpdate(tokenID, title, type, brief, content, extraInfo, callback) {
        // tokenID是一个基于时间生成的uuid,用于数据唯一标识
        if (!tokenID || tokenID.length != 36) {
            //uuid.v1() Generate a v1 UUID (time-based) 
            //uuid.v4() Generate a v4 UUID (random)
            tokenID = uuid.v1();  
        }
    
        //用于查询
        var query = {token_id: tokenID};
    
        //需要更新或插入的数据
        var update = {
            title: title,
            type: type,
            brief: brief,
            content: content,
            update_time: Date.now() - (new Date()).getTimezoneOffset() * 60000,
            // $setOnInsert只会在文档插入的时候设置字段的值,如果已存在不再设置字段的值
            "$setOnInsert": {token_id: tokenID} 
        };
    
        if (extraInfo) {
            update.extension_data = extraInfo;
        }
    
        // 根据query查询数据,若存在则根据update更新数据,若不存在则根据update插入数据
        MGSession.findOneAndUpdate(query, update, {upsert: true, new: true}, function (err, doc) {
                // console.log('MGSession createOrUpdate isNew: ' + doc.isNew);  // true: 返回更新后的document,false: 其他
                callback(doc)
            }
        )
    }
    

    当我们调用这个方法时,没有MGSessionDB则创建,没有MGSession则创建,并将数据更新或插入。另外node-uuid的更多内容可以在GitHub查看。

    6. 数据查询
    • 按参数查询
    function findOneByTokenID(tokenID, callback) {
        return MGSession.where({token_id: tokenID}).findOne(callback);
    }
    
    • 查询所有数据
    function findAll(callback) {
        return MGSession.find(callback);
    }
    

    暂时写到这里,若有不足欢迎指正,谢谢

    相关文章

      网友评论

          本文标题:MongoDB-mongoose ODM的基本应用学习

          本文链接:https://www.haomeiwen.com/subject/cehztxtx.html