使用node.js和MongoDB显示好友列表

时间:2014-11-18 03:37:57

标签: node.js mongodb

我是node.js的新用户,我正在尝试使用此应用程序https://github.com/knoldus/Node.js_UserLogin_Template 但是,我看不到朋友列表。我不知道有什么问题? 你能帮我解决问题吗?

由于

1 个答案:

答案 0 :(得分:0)

//Your user schema is looks like that 
const userSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        //unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    }, 

    friends: {
        type: Array // here you can put your friends collections _id like this [ObjectId("id1"), ObjectId("id2")]
    }
});
const FriendSchema = new Schema({
  user_from: {
    type: Schema.Types.ObjectId,
    ref: "users",
    required: true
  },
  user_to: {
    type: Schema.Types.ObjectId,
    ref: "users",
    required: true
  },
  is_accepted: {
      type: Boolean,
      default: false
  },
  date: {
    type: Date,
    default: Date.now
  }
});
//and your query will look like that -- 
FriendModel.aggregate([
    {
      $lookup: {
        from: "users", // users collection
        localField: "_id", // friends collection id
        foreignField: "friends", // friends field in you users collection document
        as: "myfriends" //any alias name you can use
      }
    },
    {
     $match: { // matching condition for current user's friends from friends collection including current user 
        $or: [
          { user_to: mongoose.Types.ObjectId(req.user.id) }, // req.user.id referrers to logged in user object id  
          { user_from: mongoose.Types.ObjectId(req.user.id) },         
        ]
     },
     $match: { is_accepted: true} // that condition is for is user accepted friend request or not.
    }
     ,
     {  // filtering logged in user from the friend list 
      $project: {
        myfriends: { // myfriends is alias name that you used in $loopup part
          $filter: {
            input: "$myfriends",
            as: "item",
            cond: { $ne: [ "$$item._id", mongoose.Types.ObjectId(req.user.id) ] }
         }
        }       
      }   
    }
  ])