mongoose和mongoDB中的模式之间的关系

时间:2017-05-23 10:50:05

标签: mongodb mongoose mongoose-schema mongoose-populate

我正在开发一个聊天应用程序,用户可以在其中进行私人对话。我使用nodejs以及socketio和mongodb。我需要在一些模式(如聊天和线程模式)之间建立一些关系,其中聊天模式由一个线程(id或名称)组成。线程模式可以轻松地检索对话。我发现了一些与猫鼬模型之间关系有关的答案,但我不太清楚它是如何工作的。这是我尝试过的代码。如何建立这种关系?。

const message = new Schema({
    sender:{
        type : Schema.Types.ObjectId,
        ref : 'user'
    },
    message:String,
    thread:{
        type : Schema.Types.ObjectId,
        ref : 'thread'
    },
    created:{ type: Date, default: Date.now }
});

线程架构

 const thread = new Schema({
    people:[{uname:String}],
    created:{ type: Date, default: Date.now }
});

用户架构

const User = new Schema({
  fname:String,
  lname:String,
  uname:{type:String,unique:true},
  email:{type:String,unique:true,lowercase:true},
  password:String,
  friends:[{
    type : Schema.Types.ObjectId,
    ref : 'User'
}]
});

1 个答案:

答案 0 :(得分:0)

它在mongoose中称为人口,您可以从其他集合中填充此字段:

...
User.findOne({fname: 'John'})
.populate('friends')
.exec()
.then(user=>{
    console.log('User - ', user);
})
.catch(err=>{
   throw err;
})