我正在尝试使用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方法以解决我的问题?
答案 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。希望这会有所帮助。