/**********     用户表                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 表实例的更多相关文章

  1. sharding-jdbc之——分库分表实例

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79368021 一.概述 之前,我们介绍了利用Mycat进行分库分表操作,Mycat ...

  2. (原创)hibernate 一对多建表实例详解 附上各个注释的含义

    这个是hibernate的一对多建表实例:一的一端是部门(Department),对的一端是员工(Employee),下面贴上成员源代码:其中@mappedBy是加在@OneToMany一端,并且它的 ...

  3. Qt StyleSheet样式表实例(转)

    QT论坛看到的,收藏一下! 在涉及到Qt 美工的时候首先需要掌握CSS 级联样式表. 下面将通过几个例子来介绍一下怎样使用Qt中的部件类型设计.自定义的前台背景与后台背景的颜色: 如果需要一个文本编辑 ...

  4. Django开发密码管理表实例【附源码】

    文章及代码比较基础,适合初.中级人员,高手略过 阅读此篇文章你可以: 获取一个Django实现增删改查的案例源码 了解数据加密的使用场景和方法以及如何在Python3中使用 背景介绍 DBA需要维护一 ...

  5. JAVA 99乘法表实例

    实例: public class Test{ public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1 ...

  6. Oracle建表实例

    建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子: CREATE TABLE banping  ...

  7. oracle数据库、客户端安装以及ps/sql连接和导入表实例

    从下面的网址下载http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win32soft-098 ...

  8. 6.JAVA-链表实例

    1.实现链表的步骤 1).实现Node节点类(用来保存链表中每个节点的数据,以及下一个节点成员) 2).实现LinkList链表类(用来封装Node节点类,和用户实现交互) 3).在LinkList类 ...

  9. JDBC创建表实例

    在本教程将演示如何在JDBC应用程序中创建一个数据库表. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中创建数据库表. 要执行以下示例,需要用实际用户名和密码替 ...

随机推荐

  1. 分享一个漂亮按钮插件FancyButtons

    一转眼,2018年的第10天就这样过去了.回看17年,曾经做了些啥都忘记了,就像每一天写日志时的样子(双手放在键盘上,怒着嘴,抬着头,望着天花板), 然后突然记得好像好久没有写随笔了(@_@).自从配 ...

  2. Springboot 入门创建hello world1!

    1.首先使用工具是Eclipse,安装插件,点击“Help”-“Eclipse Marketplace...”, 一步步直接Ok,等待安装完成 2.创建Springboot项目 到此 就创建成功了 3 ...

  3. PyCharm 2018.1 软件汉化

    下载汉化包 链接: https://pan.baidu.com/s/1buLFINImW_3cNzP8HsB4cA 密码: fqpu 安装汉化包 找到pycharm安装目录 直接把刚刚下载的汉化包复制 ...

  4. nodejs源码—初始化

    概述 相信很多的人,每天在终端不止一遍的执行着node这条命令,对于很多人来说,它就像一个黑盒,并不知道背后到底发生了什么,本文将会为大家揭开这个神秘的面纱,由于本人水平有限,所以只是讲一个大概其,主 ...

  5. JZOJ 5842

    Description 给定一个n*m 的 01 矩阵,求包含[l,r]个 1 的子矩形个数. Input 第一行,两个正整数n,m.接下来n 行,每行一个长度为 m 的 01 串,表示给定的矩阵.接 ...

  6. JZOJ 3383. 【NOIP2013模拟】太鼓达人

    3383. [NOIP2013模拟]太鼓达人 (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits ...

  7. [译]The Python Tutorial#10. Brief Tour of the Standard Library

    [译]The Python Tutorial#Brief Tour of the Standard Library 10.1 Operating System Interface os模块为与操作系统 ...

  8. python3.7 os模块

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 os模块 #os模块是与操作系统交互的一个接口 # os.get ...

  9. Problem E. TeaTree - HDU - 6430 (树的启发式合并)

    题意 有一棵树,每个节点有一个权值. 任何两个不同的节点都会把他们权值的\(gcd\)告诉他们的\(LCA\)节点.问每个节点被告诉的最大的数. 题解 第一次接触到树的启发式合并. 用一个set维护每 ...

  10. [Poj1273]Drainage Ditches(网络流)

    Description 给图,求最大流 最大流模板题,这里用dinic Code #include <cstdio> #include <cstring> #include & ...