想想以前学习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); }); }); }); }); };