在用户模式中引用用户模式(并使用populate方法)?猫鼬

时间:2017-11-30 04:52:58

标签: node.js mongodb mongoose

我正在尝试使用mongoose创建一个应用程序。我有一个用户架构。用户可以关注其他用户(类似于Twitter或Instagram的工作方式。

这是我的UserSchema:

let UserSchema = new Schema({
    email: {
        type: String,
        required: true,
        unique: true,
    },
    username: {
        type: String,
        required: true,
        unique: true,
    },
    password: {
        type: String
    },
    following: {
        type: [Schema.Types.ObjectId],
        ref: 'User'
    },
    followers: {
        type: [Schema.Types.ObjectId],
        ref: 'User'
    }
})

我正在尝试创建一条路线,该路线将显示用户的关注者和以下信息,例如他们的姓名和身份证明。所以,我试过这样的事情:

User.findOne({ _id: req.session.user }).populate('follower',['username']).then((user) => {
        res.send(user);
    })

但是,返回的json是:

   {
      "_id":"5a1dec7280a69b417a170e92",
      "username":"vegeta",
      "email":"vegeta@gmail.com",
      "__v":0,
      "followers":[
         "5a1dec7280a69b417a170e92",
         "5a1dedb9a88aad42cad87dde"
      ],
      "following":[
         "5a1dec7280a69b417a170e92",
         "5a1dedb9a88aad42cad87dde"
      ],
      "password":"$2a$10$ZsEpC6LoE0I.FzsTtPo2IOBICRGoYsFV0s2RVNcCW/g9VO4ErGaKW"
   }

相反,我希望看到有关关注者的信息,并遵循以下内容:

   {
      "_id":"5a1dec7280a69b417a170e92",
      "username":"vegeta",
      "email":"vegeta@gmail.com",
      "__v":0,
      "followers":[
         {
            _id: "5a1dec7280a69b417a170e92",
            username: "vegeta"
         },
         {
            _id: "5a1dedb9a88aad42cad87dde",
            username: "goku"
         }
      ],
      "following":[
         {
            _id: "5a1dec7280a69b417a170e92",
            username: "vegeta"
         },
         {
            _id: "5a1dedb9a88aad42cad87dde",
            username: "goku"
         }
      ],
      "password":"$2a$10$ZsEpC6LoE0I.FzsTtPo2IOBICRGoYsFV0s2RVNcCW/g9VO4ErGaKW"
   }

如何修复User.findOne方法以解决我的问题?

1 个答案:

答案 0 :(得分:0)

可以如下更改模式以使其正常工作,因为我们可以使用Scheme中的Object。

let UserSchema = new Schema({
  email: { type: String, required: true, unique: true },
  username: { type: String, required: true, unique: true },
  password: { type: String },
  following: [{ 
    _id: { type: [Schema.Types.ObjectId], ref: 'User' },
    username: { type: String,  ref: 'User' } 
  }],
  followers: [{ 
    _id: { type: [Schema.Types.ObjectId], ref: 'User' },
    username: { type: String,  ref: 'User' }
  }]
})

有关详细信息,请参阅Mongoose Schema Types。希望这会有所帮助。