Mongoose 表实例

  1 /**********     用户表                BY  Jaysir         2015.6.21
  2 ***********
  3 ***********                    可搜索以下关键词来查看未实现功能
  4 ***********
  5 ***********                    TODO    :     未完成
  6 ***********                    DONE    :     已完成
  7 ***********                    TOTEST  :     待测试
  8 ***********                    NOTEST  :     无需测试
  9 ***********                    WAITING :     功能待定
 10 ***********
 11 ***********            接口:    (暂未实现 增加分组,更改好友分组等功能)
 12 ***********                            findOneByEmail     (email ,callback)    ;
 13 ***********                            addFriend         (myEmail,otherEmail,callback);
 14 ***********                            delFriend         (myEmail,otherEmail,callback);
 15 ***********                            getFriendList    (email , callback);
 16 ***********                            regInitData        (options , callback);
 17 ***********                            updateInf        (options , callback);
 18 ***********/
 19 var mongoose = require(‘mongoose‘);
 20 var Schema = mongoose.Schema;
 21 var userModel = mongoose.model(‘users‘, UserSchema);        //
 22 // 定义用户表结构
 23 var UserSchema = new Schema({
 24     user_email        :    {type : String , required : true},
 25     user_password    :    {type : String , required : true},
 26     user_nickname    :    {type : String , required : true},
 27     user_sex        :    {type : String , required : true,enum:[‘男‘,‘女‘]},
 28     user_pic        :    {type : String , required : true},
 29
 30     user_friend_groups:[
 31             {
 32                 g_name    : String,
 33                 g_sort    : Number,
 34                 list    : [
 35                     {
 36                         friend : {type:Schema.Types.ObjectId,ref:‘users‘},        //    引用users表   查询时可以解引用即为用户的好友列表
 37                         remark : {type:String}
 38                     }
 39                 ]
 40             }
 41         ],
 42     user_reg_time    :    {type : Date , required : false}
 43 });
 44
 45 //        DONE       NOTEST
 46 UserSchema.statics.findOneByEmail = function(email, callback) {
 47     this.findOne({user_email:email}, callback);
 48 };
 49
 50
 51 //添加好友    DONE,        TOTEST        //查询代码(以下几行注释为命令行下测试代码)mongo命令行下已测试
 52 // db.users.update({user_email:"[email protected]","user_friend_groups.g_sort":1},    //user_email,g_sort需存在
 53 //                   {"$push": {
 54 //                               "user_friend_groups.$.list":{
 55 //                                                           friend  :  {
 56 //                                                                       "$ref" : "users",
 57 //                                                                       "$id"  : ObjectId("55867dd74389afa216e60fad")
 58 //                                                           },
 59 //                                                           remark  :  "呵呵1"
 60 //                               }
 61 //                   }});
 62 UserSchema.statics.addFriend = function(myEmail,otherEmail,callback){
 63     var myId , otherId;
 64     var self = this;
 65     self.findOneByEmail(myEmail,function(err,doc){
 66         myId = doc._id;
 67         self.findOneByEmail(otherEmail,function(err,doc){
 68             otherId = doc._id;
 69             if(!otherId){callback("不存在的用户!");return;}
 70             //添加好友都默认添加到  “我的好友”  列表
 71             self.update({_id:myId},{"$push":{"user_friend_groups.0.list":{friend:otherId,remark:""}}},callback(err));
 72             self.update({_id:otherId},{"$push":{"user_friend_groups.0.list":{friend:myId,remark:""}}},callback(err));
 73         });
 74     });
 75     // // 介于js异步执行,这里将添加好友放至 取得myId 与 otherId 后的回调里嵌套执行。防止未取得Id值就执行添加好友到列表而错误
 76 }
 77 //删除好友  DONE,        TOTEST        //查询代码(以下几行注释为命令行下测试代码)mongo命令行下已测试(同addFriend代码一起测试)
 78 // db.users.update({    user_email:"[email protected]",
 79 //                      "user_friend_groups.list.remark":"呵呵1"
 80 //                 },
 81 //                 {"$pull":{
 82 //                             "user_friend_groups.$.list":{remark:"呵呵1"}
 83 //                         }
 84 //                 })
 85 UserSchema.statics.delFriend = function(myEmail,otherEmail,callback){
 86     var myId , otherId;
 87     var myId , otherId;
 88     var self = this;
 89     self.findOneByEmail(myEmail,function(err,doc){
 90         myId = doc._id;
 91         self.findOneByEmail(otherEmail,function(err,doc){
 92             otherId = doc._id;
 93             if(!otherId){callback("不存在的用户!");return;}
 94             self.update({_id:myId,"user_friend_groups.list.friend":otherId},{"$pull":{"user_friend_groups.$.list":{friend:otherId}}},callback(err));
 95             self.update({_id:otherId,"user_friend_groups.list.friend":myId},{"$pull":{"user_friend_groups.$.list":{friend:myId}}},callback(err));
 96         });
 97     });
 98 }
 99 //用户登陆后 获取初始化的数据        DONE  TOTEST
100 //此处获取用户好友列表并解引用可以直接  result.user_friend_groups[0].list[0].friend.user_email,访问用户好友的Email等信息
101 //用户信息安全考虑,屏蔽掉解引用后好友的部分信息(未屏蔽,实现方案待定 WAITING)
102 UserSchema.statics.getFriendList = function(email , callback){
103     var self = this;
104     self.findOne({user_email:email}).populate("user_friend_groups.list.friend").exec().then(function(result){
105         //对用户好友列表进行排序
106         result.user_friend_groups.sort(function(obj1,obj2){return obj1.g_sort-obj2.g_sort;});
107         callback(result);
108     });
109 }
110 //用户注册 初始化数据        DONE  TOTEST
111
112 UserSchema.statics.regInitData = function(options , callback){
113     var userInf = {
114         user_email        :     options.email ? options.email : options.user_email,
115         user_password    :     options.password ? options.password : options.user_password,
116         user_nickname     :     (options.nickname||options.user_nickname) ? (options.nickname||options.user_nickname) : "",
117         user_sex        :     (options.sex == "女")||(options.user_sex == "女") ? "女" : "男",
118         user_pic         :     "url",
119         "user_friend_groups.0" : {
120                     g_name : "我的好友",
121                     g_sort : 0,
122                     list   : []
123                 },
124         user_reg_time     :     Date()
125     }
126     var newUser = new userModel(userInf);
127     newUser.save(callback());
128 }
129
130 //更新用户信息
131 UserSchema.statics.updateInf = function(options,callback){
132     //TODO
133 }
134
135 module.exports = mongoose.model(‘users‘, UserSchema);

原创,转载请著名

时间: 2024-12-29 23:11:41

Mongoose 表实例的相关文章

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

这个是hibernate的一对多建表实例:一的一端是部门(Department),对的一端是员工(Employee),下面贴上成员源代码:其中@mappedBy是加在@OneToMany一端,并且它的name属性=多的那一端(N端)属性是一的那一端的属性名,mappedBy是定义在Department类中,即Department类不负责维护级联关系.即维护者是Employee类 Department类: package com.javabean; import java.io.Serializa

利用mybatis-generator自动生成表实例类和映射文件

我们经常用到mybatis来进行程序代码级别对数据库的操作,然而需要编写大量的表实例类与映射文件,现在使用工具mybatis-generator就可实现上述文件的自动生成,下面简要介绍一下其使用方法. 1.创建工程 为了下载jar包比较方便,本人创建一个名为mybatis的maven工程来应用mybatis-generator. 2.修改pom.xml文件,下载依赖的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" x

ExcelUtils 导表实例

@RequestMapping("/dealer/chargebook/exportv.htm")    public void getChargeBookList(int epmkey,String bdakey,int year,int month,HttpServletRequest request, HttpServletResponse response) {        List<ChargeBook> list = chargeBookService.get

linux笔记-032-日常运维-filter表实例,nat表实例

filter表实例 需求:把80端口,22端口,21端口放行,22端口指定只有某IP段可以访问,其他IP段的均拒绝,在这里,利用SHELL脚本完成这个需求 [[email protected]01:~#] vim /usr/local/sbin/iptables.sh #! /bin/bash # 以下操作没用-t指定表,所以对默认的filter表生效 # 定义一个变量ipt,命令用绝对路径能不受环境变量影响 ipt="/usr/sbin/iptables" # 清空之前定义的规则 $

mysql数据库建库建表实例

一.实例. drop database if exists school; //如果存在SCHOOL则删除create database school; //建立库SCHOOLuse school; //打开库SCHOOLcreate table teacher //建立表TEACHER(    id int(3) auto_increment not null primary key,    name char(10) not null,    address varchar(50) defa

Qt StyleSheet样式表实例(转)

QT论坛看到的,收藏一下! 在涉及到Qt 美工的时候首先需要掌握CSS 级联样式表. 下面将通过几个例子来介绍一下怎样使用Qt中的部件类型设计.自定义的前台背景与后台背景的颜色: 如果需要一个文本编辑器的背景变为黄色, 下面是代码行: qApp->setStyleSheet("QLineEdit { 针对一个对话框的内容中使用QLineEdit以及QLineEdit的子类的背景都变成黄色, 下面是代码: myDialog ->setStyleSheet("QLineEdit

JavaScript修改注册表实例

来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=241GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com 注册表有关安全设置项的说明:注册表路径:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones Zones 项包含表示为计算机定义的每个安全区域的项.默认情况下,定义以下

mysql 创建表实例

create database school;  // 建立库schooluse school;  // 打开库SCHOOLcreate table teacher(  // 建立表TEACHER    id int(3) auto_increment not null primary key,    name char(10) not null,    address varchar(50) ,    year date);  // 建表结束 // 以下为插入字段insert into tea

JAVA 99乘法表实例

实例: public class Test{ public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+j*i+"\t"); } System.out.print("\n"); } } } 运行结果: