如何将嵌套在一个集合中的所有值与另一个集合(mongodb)中的值进行匹配?

时间:2019-02-08 22:10:11

标签: node.js mongodb mongoose

我正在创建一个消息传递应用程序,我需要能够显示与给定用户具有对话历史记录的用户。 我有用户和对话。型号如下。 (有一个邮件集合,其中每个文档都引用一个对话)

//This is the conversation model.
const mongoose = require('mongoose');
const ConversationSchema = new mongoose.Schema({
  participants: {
    type: Array,
    required: true
  }
});
const Conversation = mongoose.model('Conversation', ConversationSchema);

//This is the users model (there's more to it, but this is the relevant stuff)
module.exports = Conversation;
const UserSchema = new mongoose.Schema({
  firstName: {
    type: String,
    required: true
  },
  lastName: {
    type: String,
    required: true
  }
});
const User = mongoose.model('User', UserSchema);
module.exports = User;

每个都有一个_id生成。 我正在发送带有用户ID的http请求。 在我的控制器中,使用猫鼬,我可以执行以下操作:

Conversation.find({participants:req.params.user_id})

这将返回一个对话对象数组,每个对话对象都包含一个参与者数组(一个用户ID数组)。 然后,我要做的就是将所有参与者都匹配到“用户”集合,这样我就可以获得每个用户的用户ID,名字和姓氏。

总而言之,我需要发送一个以用户ID作为参数的HTTP请求,并接收与提供的用户具有对话历史记录的用户数组。

下一步是什么?如何将我从相关对话中获得的用户ID与用户集合中的用户ID相匹配?

1 个答案:

答案 0 :(得分:0)

尝试一下

app.post('/:user_id', async(req, res) => {
 const partisipant = await Conversation.find({id:req.params.user_id});
 const userData = await User.find({id:req.params.user_id});
 if(!userData || userData != partisipant){
  throw ('no data match')
 }
 //...if found the data, do anything you want
})

使用异步等待从数据库中获取收集数据,并进行比较。

希望这个线索可以为您提供帮助