【发布时间】:2019-07-02 04:07:37
【问题描述】:
我正在设计一个消息传递功能。我有一个用户集合,其中包含 ID、名字和姓氏等内容。我还有一个消息集合,其中包含一组值,如作者 ID、消息正文等。 最后,我有一个会话集合,其中包含一个 ID 和参与者,这是一个用户 ID 数组。
我认为这可能不是一个好的结构,因为我希望能够运行一个查询来返回给定用户具有消息历史记录的所有用户(ID、名字和姓氏)。就目前而言,我似乎无法运行一个查询来返回我需要的所有信息。我需要重组,还是有办法运行这个查询?
这是一个结构示例:
Conversation:
{ id: 123
participants: ['<user ID here>', '<user ID here>'],
}
User:{
id:654,
firstName: John
lastName: Doe
Message:
{ sender: 'john',
content: 'howdy',
time_created: new Date(),
converstationId: 123
},
{ sender: 'marry',
content: 'good u',
time_created: new Date(),
converstationId: 123
},
我尝试了以下几种变体,但除了一个空数组,我什么也没得到:
db.Users.aggregate([
{
$unwind: "$participants"
},
{
$lookup:
{
from: "conversations",
localField: "participants",
foreignField: "_id",
as: "response"
}
},
{
$match: { "response": { $ne: [] } }
}
])
所以我的问题是: 如何获取参与者数组中与用户 ID 相关的所有用户?
【问题讨论】:
-
请询问具体问题而不是意见。您可以参考帮助中心了解更多关于how to ask good questions
标签: node.js mongodb mongoose nosql