Mongoose 表实例
/********** 用户表 BY Jaysir 2015.6.21
***********
*********** 可搜索以下关键词来查看未实现功能
***********
*********** TODO : 未完成
*********** DONE : 已完成
*********** TOTEST : 待测试
*********** NOTEST : 无需测试
*********** WAITING : 功能待定
***********
*********** 接口: (暂未实现 增加分组,更改好友分组等功能)
*********** findOneByEmail (email ,callback) ;
*********** addFriend (myEmail,otherEmail,callback);
*********** delFriend (myEmail,otherEmail,callback);
*********** getFriendList (email , callback);
*********** regInitData (options , callback);
*********** updateInf (options , callback);
***********/
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userModel = mongoose.model('users', UserSchema); //
// 定义用户表结构
var UserSchema = new Schema({
user_email : {type : String , required : true},
user_password : {type : String , required : true},
user_nickname : {type : String , required : true},
user_sex : {type : String , required : true,enum:['男','女']},
user_pic : {type : String , required : true}, user_friend_groups:[
{
g_name : String,
g_sort : Number,
list : [
{
friend : {type:Schema.Types.ObjectId,ref:'users'}, // 引用users表 查询时可以解引用即为用户的好友列表
remark : {type:String}
}
]
}
],
user_reg_time : {type : Date , required : false}
}); // DONE NOTEST
UserSchema.statics.findOneByEmail = function(email, callback) {
this.findOne({user_email:email}, callback);
}; //添加好友 DONE, TOTEST //查询代码(以下几行注释为命令行下测试代码)mongo命令行下已测试
// db.users.update({user_email:"jaysir@163.com","user_friend_groups.g_sort":1}, //user_email,g_sort需存在
// {"$push": {
// "user_friend_groups.$.list":{
// friend : {
// "$ref" : "users",
// "$id" : ObjectId("55867dd74389afa216e60fad")
// },
// remark : "呵呵1"
// }
// }});
UserSchema.statics.addFriend = function(myEmail,otherEmail,callback){
var myId , otherId;
var self = this;
self.findOneByEmail(myEmail,function(err,doc){
myId = doc._id;
self.findOneByEmail(otherEmail,function(err,doc){
otherId = doc._id;
if(!otherId){callback("不存在的用户!");return;}
//添加好友都默认添加到 “我的好友” 列表
self.update({_id:myId},{"$push":{"user_friend_groups.0.list":{friend:otherId,remark:""}}},callback(err));
self.update({_id:otherId},{"$push":{"user_friend_groups.0.list":{friend:myId,remark:""}}},callback(err));
});
});
// // 介于js异步执行,这里将添加好友放至 取得myId 与 otherId 后的回调里嵌套执行。防止未取得Id值就执行添加好友到列表而错误
}
//删除好友 DONE, TOTEST //查询代码(以下几行注释为命令行下测试代码)mongo命令行下已测试(同addFriend代码一起测试)
// db.users.update({ user_email:"jaysir@163.com",
// "user_friend_groups.list.remark":"呵呵1"
// },
// {"$pull":{
// "user_friend_groups.$.list":{remark:"呵呵1"}
// }
// })
UserSchema.statics.delFriend = function(myEmail,otherEmail,callback){
var myId , otherId;
var myId , otherId;
var self = this;
self.findOneByEmail(myEmail,function(err,doc){
myId = doc._id;
self.findOneByEmail(otherEmail,function(err,doc){
otherId = doc._id;
if(!otherId){callback("不存在的用户!");return;}
self.update({_id:myId,"user_friend_groups.list.friend":otherId},{"$pull":{"user_friend_groups.$.list":{friend:otherId}}},callback(err));
self.update({_id:otherId,"user_friend_groups.list.friend":myId},{"$pull":{"user_friend_groups.$.list":{friend:myId}}},callback(err));
});
});
}
//用户登陆后 获取初始化的数据 DONE TOTEST
//此处获取用户好友列表并解引用可以直接 result.user_friend_groups[0].list[0].friend.user_email,访问用户好友的Email等信息
//用户信息安全考虑,屏蔽掉解引用后好友的部分信息(未屏蔽,实现方案待定 WAITING)
UserSchema.statics.getFriendList = function(email , callback){
var self = this;
self.findOne({user_email:email}).populate("user_friend_groups.list.friend").exec().then(function(result){
//对用户好友列表进行排序
result.user_friend_groups.sort(function(obj1,obj2){return obj1.g_sort-obj2.g_sort;});
callback(result);
});
}
//用户注册 初始化数据 DONE TOTEST UserSchema.statics.regInitData = function(options , callback){
var userInf = {
user_email : options.email ? options.email : options.user_email,
user_password : options.password ? options.password : options.user_password,
user_nickname : (options.nickname||options.user_nickname) ? (options.nickname||options.user_nickname) : "",
user_sex : (options.sex == "女")||(options.user_sex == "女") ? "女" : "男",
user_pic : "url",
"user_friend_groups.0" : {
g_name : "我的好友",
g_sort : 0,
list : []
},
user_reg_time : Date()
}
var newUser = new userModel(userInf);
newUser.save(callback());
} //更新用户信息
UserSchema.statics.updateInf = function(options,callback){
//TODO
} module.exports = mongoose.model('users', UserSchema);
原创,转载请著名
Mongoose 表实例的更多相关文章
- sharding-jdbc之——分库分表实例
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79368021 一.概述 之前,我们介绍了利用Mycat进行分库分表操作,Mycat ...
- (原创)hibernate 一对多建表实例详解 附上各个注释的含义
这个是hibernate的一对多建表实例:一的一端是部门(Department),对的一端是员工(Employee),下面贴上成员源代码:其中@mappedBy是加在@OneToMany一端,并且它的 ...
- Qt StyleSheet样式表实例(转)
QT论坛看到的,收藏一下! 在涉及到Qt 美工的时候首先需要掌握CSS 级联样式表. 下面将通过几个例子来介绍一下怎样使用Qt中的部件类型设计.自定义的前台背景与后台背景的颜色: 如果需要一个文本编辑 ...
- Django开发密码管理表实例【附源码】
文章及代码比较基础,适合初.中级人员,高手略过 阅读此篇文章你可以: 获取一个Django实现增删改查的案例源码 了解数据加密的使用场景和方法以及如何在Python3中使用 背景介绍 DBA需要维护一 ...
- JAVA 99乘法表实例
实例: public class Test{ public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1 ...
- Oracle建表实例
建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子: CREATE TABLE banping ...
- oracle数据库、客户端安装以及ps/sql连接和导入表实例
从下面的网址下载http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win32soft-098 ...
- 6.JAVA-链表实例
1.实现链表的步骤 1).实现Node节点类(用来保存链表中每个节点的数据,以及下一个节点成员) 2).实现LinkList链表类(用来封装Node节点类,和用户实现交互) 3).在LinkList类 ...
- JDBC创建表实例
在本教程将演示如何在JDBC应用程序中创建一个数据库表. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中创建数据库表. 要执行以下示例,需要用实际用户名和密码替 ...
随机推荐
- ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
本文来源于知乎上的一个提问. 为了程序的易读性,我们会使用 ES6 的解构赋值: function f({a,b}){} f({a:1,b:2}); 这个例子的函数调用中,会真的产生一个对象吗?如果会 ...
- mysql五:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 03.VUE学习之动态绑定值
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- stark组件(2):提取公共视图函数、URL分发和设置别名
效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...
- Linux 用户行为日志记录
工作中我们常常遇到,有的员工不安于被分配的权限,老是想sudo echo "ziji" /usr/bin/visudo NOPASSWD:ALL来进行提权,造成误删了数据库某条重要 ...
- 异步消息处理机制,UI更新
UI只能在主线程中完成更新,在子线程中更新UI报错如下 Only the original thread that created a view hierarchy can touch its vie ...
- CQRS之旅——旅程5(准备发布V1版本)
旅程5:准备发布V1版本 添加功能和重构,为V1版本发布做准备. "大多数人在完成一件事之后,就像留声机的唱片一样,一遍又一遍地使用它,直到它破碎,忘记了过去是用来创造更多未来的东西.&qu ...
- 精简Docker镜像的五种通用方法
http://dockone.io/article/8163 精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患.优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而 ...
- spring整合mybatis详解
在上篇螃蟹已经说明spring注解的最经典配置,接下来开始整合mybatis,这样整个项目就相对完整了. 有关本实例的源码可以到 <spring MVC注解实例及说明文档> 下载. 如需转 ...
- Spring进阶-怎样集成定时调度Quartz
在一些项目里面比如进销存系统,对一些过期图片的定时清理或者库存不足发出预警提示,就需要用到定时调度技术. 每当经过一段时间,程序会自动执行,就是定时调度.如果要使用定时调度,则必须保证程序始终运行才行 ...