Node.js mongoose在一个字段中处理两个ref ObjectID,以获取ObjectID的每个集合

Node.js mongoose在一个字段中处理两个ref ObjectID,以获取ObjectID的每个集合,node.js,mongodb,express,mongoose,aggregation-framework,Node.js,Mongodb,Express,Mongoose,Aggregation Framework,我对mongoose和RESTAPI非常陌生,检索每个集合引用另一个文档时遇到问题 所有这些模式都经过了编辑,以便于阅读,因为实际情况下,我有更多的字段,我认为不需要显示 我有一个用户模式数据,如下所示: { "_id": "123" "username": "Paijo", "email": "paijo@gmail.com" } { &quo

我对mongoose和RESTAPI非常陌生,检索每个集合引用另一个文档时遇到问题

所有这些模式都经过了编辑,以便于阅读,因为实际情况下,我有更多的字段,我认为不需要显示

我有一个
用户模式
数据,如下所示:

{
    "_id": "123"
    "username": "Paijo",
    "email": "paijo@gmail.com"
}
{
    "_id": "345"
    "username": "Flix",
    "email": "Flix@gmail.com"
}
{
    "_id": "5f525b2ac1267e868e882fbc",
    "roomId": "123_345",
    "latestMessage": "Bisa lahh cujkkkk",
    "updatedAt": {
        "$date": "2020-09-05T07:00:27.846Z"
    },
    "createdAt": {
        "$date": "2020-09-04T15:20:10.840Z"
    }
}
我有这样的
消息模式
数据:

{
    "_id": "123"
    "username": "Paijo",
    "email": "paijo@gmail.com"
}
{
    "_id": "345"
    "username": "Flix",
    "email": "Flix@gmail.com"
}
{
    "_id": "5f525b2ac1267e868e882fbc",
    "roomId": "123_345",
    "latestMessage": "Bisa lahh cujkkkk",
    "updatedAt": {
        "$date": "2020-09-05T07:00:27.846Z"
    },
    "createdAt": {
        "$date": "2020-09-04T15:20:10.840Z"
    }
}
我想查询
roomId
中是否有一些
user\id
,并检索
user schema
message schema
的所有字段

假设我是用
用户id
123登录的,我想在
roomId
345
的详细用户中获取包含123的消息

我希望获取的预期结果是:

{
    "_id": "5f525b2ac1267e868e882fbc",
    "roomId": "123_345",
    "latestMessage": "Bisa lahh cujkkkk",
    "updatedAt": {
        "$date": "2020-09-05T07:00:27.846Z"
    },
    "createdAt": {
        "$date": "2020-09-04T15:20:10.840Z"
    },
    "username": "Flix", // get result from user schema which has _id 345
    "email": "Flix@gmail.com" // get result from user schema which has _id 345
}
目前,我只能通过此查询获取包含用户登录的
\u id
的所有消息,但我不知道如何在
roomId

exports.listChat = async (req, res)=>{
  const userID = req.userID
  const listChat = await ChatRoom.find({roomId: new RegExp(userID)}).select("-message")
  console.log('listChat' , listChat)

  res.send(listChat)
}
您可以从使用和定义两个独立的子字段开始:
me
(当前用户)和
other
——您要使用的值


关于您的查询,是否需要
$project
?我的意思是,我想显示所有字段,而不是定义每个字段field@flix不,这只是为了摆脱嵌套的子文档,但您不需要它