【发布时间】:2021-09-11 21:45:54
【问题描述】:
我有 4 个收藏。
Chat,
ChatUser,
Messages,
User
三个集合的文件是,
Chat:
_id,
type ('dual', 'group')
ChatUser:
_id,
userId (Ref: Users)
chatId (Ref: Chat)
Messages:
_id,
chatId (Ref: Chat)
type: ('text', 'media')
message
Users:
_id,
name,
avatar
我将在 ChatUser 表中使用相同的 ChatId 存储我的用户 ID 和我的合作伙伴的用户 ID。
当我尝试列出我的所有聊天记录时,我会从 ChatUser 表中收集我的所有聊天记录并将它们应用到以下聊天聚合中。
let chats = await Chat.aggregate([
{ $match: { _id: { $in: chatsOfUser } } },
{
$lookup: {
from: "chatusers",
// let: { 'chatId': "$_id" },
// pipeline: [
// {
// $match: { $expr: { $cond: [{ $$userId: { $ne: req.user._id } }] } },
// },
// ],
localField: "_id",
foreignField: "chatId",
as: "ChatUser",
},
},
{
$lookup: {
from: "messages",
localField: "_id",
foreignField: "chatId",
as: "messages",
},
},
{
$project: {
_id:1,
type:1,
messages:1,
ChatUser: {
$filter: {
input: "$ChatUser",
as: "chatuser",
cond: {$ne:["$$chatuser.userId",req.user._id]} // Trying to Ignore requested User Details from here
},
},
},
},
]);
但是,我仍然使用以下请求的用户 ID 获取数据。
[
{
"_id": "60daed3ce2c7136e4e88314d",
"type": "dual",
"messages": [
{
"_id": "60db215629d01c669696cb9b",
"message": "Hello friend",
"type": "text",
"chatId": "60daed3ce2c7136e4e88314d",
"fromUserId": "60daeb5617b93e6cb968582e"
},
{
"_id": "60db215629d01c669696cb9c",
"message": "Hi buddy",
"type": "text",
"chatId": "60daed3ce2c7136e4e88314d",
"fromUserId": "60d9ca3a4f70d8496fd47d4a"
},
{
"_id": "60db215629d01c669696cb9d",
"message": "Long time no speak",
"type": "text",
"chatId": "60daed3ce2c7136e4e88314d",
"fromUserId": "60d9ca3a4f70d8496fd47d4a"
}
],
"ChatUser": [
{
"_id": "60daed3ce2c7136e4e88314f",
"chatId": "60daed3ce2c7136e4e88314d",
"userId": "60daeb5617b93e6cb968582e", // This is requested User Id. I need to ignore it from projecting.
"createdAt": "2021-06-29T09:51:56.937Z",
"updatedAt": "2021-06-29T09:51:56.937Z",
"__v": 0
},
{
"_id": "60daed3ce2c7136e4e883151",
"chatId": "60daed3ce2c7136e4e88314d",
"userId": "60d9ca3a4f70d8496fd47d4a",
"createdAt": "2021-06-29T09:51:56.940Z",
"updatedAt": "2021-06-29T09:51:56.940Z",
"__v": 0
}
]
},
{
"_id": "60db388deb35c276cd023f32",
"type": "dual",
"messages": [
{
"_id": "60db38f729d01c669696cb9e",
"message": "Hello friend",
"type": "text",
"chatId": "60db388deb35c276cd023f32",
"fromUserId": "60daeb5617b93e6cb968582e"
},
{
"_id": "60db38f729d01c669696cb9f",
"message": "Hi buddy",
"type": "text",
"chatId": "60db388deb35c276cd023f32",
"fromUserId": "60db387feb35c276cd023f1f"
},
{
"_id": "60db38f729d01c669696cba0",
"message": "Long time no speak",
"type": "text",
"chatId": "60db388deb35c276cd023f32",
"fromUserId": "60db387feb35c276cd023f1f"
}
],
"ChatUser": [
{
"_id": "60db388deb35c276cd023f34",
"chatId": "60db388deb35c276cd023f32",
"userId": "60daeb5617b93e6cb968582e", // This is requested User Id. I need to ignore it from projecting.
"createdAt": "2021-06-29T15:13:17.245Z",
"updatedAt": "2021-06-29T15:13:17.245Z",
"__v": 0
},
{
"_id": "60db388deb35c276cd023f36",
"chatId": "60db388deb35c276cd023f32",
"userId": "60db387feb35c276cd023f1f",
"createdAt": "2021-06-29T15:13:17.253Z",
"updatedAt": "2021-06-29T15:13:17.253Z",
"__v": 0
}
]
}
]
【问题讨论】:
标签: mongodb mongoose filter project aggregation