如何在mongoDB(猫鼬)中查询其他集合来过滤文档

时间:2020-10-06 05:55:37

标签: node.js mongodb mongoose mongodb-query nestjs

我正在使用Nestjs(Node)和MongoDB(mongoose)构建一个客户服务聊天应用程序后端,用于管理用户及其与聊天机器人的聊天,以便在前端和聊天机器人服务器之间作为中间件进行聊天。

我的数据库中有这些集合

  • 用户(用于保存基本的用户详细信息)
Users : {
_id : Objectid,
firstName : String,
lastName : String,
gender : String,
email : String,
password : String
}
  • 对话(为用户和所选类别生成唯一的对话ID)
Conversations : {
_id : Objectid,
userId : Objectid, (Ref : Users)
category : String 
}
  • 消息(保存用户和chatbot之间的聊天消息)
Messages : {
_id : Objectid,
conversationId : Objectid, (Ref : Conversations)
userId : Objectid, (Ref : Users)
type : Number (0-bot,1-user)
ratings : {
    happy:Number,(1-5)
    angry:Number,(1-5)
    satisfied:Number,(1-5)
    ...
},
averageRating: Number (average of all ratings)
}

当用户与chatbot聊天时,我将双方(聊天服务器和用户)的消息都使用type和sessionId保存在我的Messages集合中。 为了分析使用chatbot的用户体验,管理员添加了一项功能,可使用给定参数为该消息添加评级,这意味着admin将对用户对所有消息的行为和情感进行评级。 我创建了一个单独的API,管理员可以在其中给具有给定参数的邮件添加评级,并且该消息将使用这些评级进行更新,并为该消息生成平均评级。

这就是我的应用程序的工作方式。现在,当管理员获取对话列表时,我需要添加两个过滤器

  • 管理员可以按平均评分(该对话中所有邮件的平均评分)过滤对话
  • 管理员可以按用户的平均评分(按用户对所有邮件的平均评分)过滤对话

在两种情况下,评分都在邮件收集中,但我需要过滤对话。

我该如何实现?

0 个答案:

没有答案