zoukankan      html  css  js  c++  java
  • nodejs项目的model操作mongo

    想想以前学习hibernate的时候,学习各种表和表之间的映射关系等一对多,多对一,多对多,后来到了工作中,勇哥告诉我, 那时在学习的时候,公司中都直接用外键关联。

    这里我们学习下,如何在Nodejs代码中操作数据库。

    两种操作数据库的方式:看这篇微博
    http://www.cnblogs.com/whoamme/p/3467374.html

    var mongodb = require('./db'),
        markdown = require('markdown').markdown;
    
    function Post(name, head, title, tags, post) {
      this.name = name;
      this.head = head;
      this.title = title;
      this.tags = tags;
      this.post = post;
    }
    
    module.exports = Post;

    插入:

    //存储一篇文章及其相关信息
    Post.prototype.save = function(callback) {
      var date = new Date();
      //存储各种时间格式,方便以后扩展
      var time = {
          date: date,
          year : date.getFullYear(),
          month : date.getFullYear() + "-" + (date.getMonth() + 1),
          day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
          minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + 
          date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
      }
      //要存入数据库的文档
      var post = {
          name: this.name,
          head: this.head,
          time: time,
          title:this.title,
          tags: this.tags,
          post: this.post,
          comments: [],
          reprint_info: {},
          pv: 0
      };
      //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //将文档插入 posts 集合
          collection.insert(post, {
            safe: true
          }, function (err) {
            mongodb.close();
            if (err) {
              return callback(err);//失败!返回 err
            }
            callback(null);//返回 err 为 null
          });
        });
      });
    };
    

      

     更新一篇文章:

    //更新一篇文章及其相关信息
    Post.update = function(name, day, title, post, callback) {
      //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //更新文章内容
          collection.update({
            "name": name,
            "time.day": day,
            "title": title
          }, {
            $set: {post: post}
          }, function (err) {
            mongodb.close();
            if (err) {
              return callback(err);
            }
            callback(null);
          });
        });
      });
    };
    

     删除一篇文章:

    //删除一篇文章
    Post.remove = function(name, day, title, callback) {
      //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //查询要删除的文档
          collection.findOne({
            "name": name,
            "time.day": day,
            "title": title
          }, function (err, doc) {
            if (err) {
              mongodb.close();
              return callback(err);
            }
            //如果有 reprint_from,即该文章是转载来的,先保存下来 reprint_from
            var reprint_from = "";
            if (doc.reprint_info.reprint_from) {
              reprint_from = doc.reprint_info.reprint_from;
            }
            if (reprint_from != "") {
              //更新原文章所在文档的 reprint_to
              collection.update({
                "name": reprint_from.name,
                "time.day": reprint_from.day,
                "title": reprint_from.title
              }, {
                $pull: {
                  "reprint_info.reprint_to": {
                    "name": name,
                    "day": day,
                    "title": title
                }}
              }, function (err) {
                if (err) {
                  mongodb.close();
                  return callback(err);
                }
              });
            }
    
            //删除转载来的文章所在的文档
            collection.remove({
              "name": name,
              "time.day": day,
              "title": title
            }, {
              w: 1
            }, function (err) {
              mongodb.close();
              if (err) {
                return callback(err);
              }
              callback(null);
            });
          });
        });
      });
    };
    
  • 相关阅读:
    log4j
    JDBCtemplete 模板
    动态代理 aop切面实现事务管理
    spring
    spring mvc 简单实现及相关配置实现
    ssm整合
    Jquery
    Git分布式版本控制系统
    Java web server 基本实现原理
    jvm
  • 原文地址:https://www.cnblogs.com/coding4/p/5594158.html
Copyright © 2011-2022 走看看