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应用程序中创建一个数据库表. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中创建数据库表. 要执行以下示例,需要用实际用户名和密码替 ...
随机推荐
- 【NTT】bzoj3992: [SDOI2015]序列统计
板子题都差点不会了 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数 列,数列中的每个数都属于集合S.小C用这个生成器生 ...
- mysql基础,数据表的类型
- 1.在Cisco Packet Tracer里交换机的初始配置
基本拓扑图: 点进交换机,会先进入交换机的用户模式,这个模式下交换机的名称后方会以‘>’显示 输入enable会进入交换机的特权模式,同样在交换机的名称后方以‘#’显示 在特权模式的环境下输入c ...
- tp5依赖注入(自动实例化):解决了像类中的方法传对象的问题
app\index\Demo1.php namespace app\index\controller; /* 容器与依赖注入的原理 ----------------------------- 1.任何 ...
- The Suspects POJ 1611
The Suspects Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, w ...
- play后面加the不加the如何分辨
play表示“参加(某种球类运动或棋牌类的活动)”时,不需要定冠词the,后面直接加球类运动名称或棋牌类活动名称,可根据实际情况翻译成“打,踢,下”等.例如: 1) He often plays fo ...
- 设计模式之第3章-模板方法模式(Java实现)
设计模式之第3章-模板方法模式(Java实现) "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场) ...
- 【Luogu P3371&P4779】【模板】单源最短路径(线段树优化Dijkstra)
线段树优化$\rm dijkstra$ 线段树每个节点维护$[l,r]$中$dist$最小的点,删除则把该点$dist$赋值为$+\infty$,然后更新该点影响到的线段树上的其他节点即可. 可以得到 ...
- IOS笔记051-手势使用
UIGestureRecognizer 利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势 UIGestureRecognizer是一个抽象类,定义了所有手势 ...
- Webapp和后端交互检查测试
除了功能,我们可以使用下面方法,查看交互过程,页面不能发现的问题: 什么是json 什么是json,json是什么,json如何使用 JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能 ...