From c1288c0aaf67c6d4c4c43ef8495b6b0d971fafe3 Mon Sep 17 00:00:00 2001 From: nightwhite Date: Wed, 3 Jul 2024 04:46:45 +0800 Subject: [PATCH 1/5] fix: Compatible with mongo 4.4 syntax --- server/src/group/group.service.ts | 69 ++++++++++++++++++------------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/server/src/group/group.service.ts b/server/src/group/group.service.ts index b65e0c58d1..13191c27ea 100644 --- a/server/src/group/group.service.ts +++ b/server/src/group/group.service.ts @@ -81,36 +81,47 @@ export class GroupService { async findGroupsByAppidAndUid(appid: string, uid: ObjectId) { const res = await this.db .collection('GroupApplication') - .aggregate() - .match({ appid }) - .lookup({ - from: 'Group', - localField: 'groupId', - foreignField: '_id', - as: 'group', - }) - .unwind('$group') - .lookup({ - from: 'GroupMember', - localField: 'groupId', - foreignField: 'groupId', - pipeline: [ - { - $match: { - uid, - }, + .aggregate([ + { $match: { appid } }, + { + $lookup: { + from: "Group", + localField: "groupId", + foreignField: "_id", + as: "group", }, - ], - as: 'member', - }) - .unwind('$member') - .project({ - _id: '$group._id', - name: '$group.name', - createdAt: '$group.createdAt', - updatedAt: '$group.updatedAt', - role: '$member.role', - }) + }, + { $unwind: "$group" }, + { + $lookup: { + from: "GroupMember", + let: { groupId: "$groupId" }, + pipeline: [ + { + $match: { + $expr: { + $and: [ + { $eq: ["$groupId", "$$groupId"] }, + { $eq: ["$uid", uid] }, + ], + }, + }, + }, + ], + as: "member", + }, + }, + { $unwind: "$member" }, + { + $project: { + _id: "$group._id", + name: "$group.name", + createdAt: "$group.createdAt", + updatedAt: "$group.updatedAt", + role: "$member.role", + }, + }, + ]) .toArray() return res From 313a5defc893d64469a4fe5850a9ee814a7bfaaf Mon Sep 17 00:00:00 2001 From: nightwhite Date: Wed, 3 Jul 2024 04:58:01 +0800 Subject: [PATCH 2/5] fix1 --- server/src/group/group.service.ts | 71 ++++++++++++++----------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/server/src/group/group.service.ts b/server/src/group/group.service.ts index 13191c27ea..e7be3ce5cf 100644 --- a/server/src/group/group.service.ts +++ b/server/src/group/group.service.ts @@ -81,47 +81,40 @@ export class GroupService { async findGroupsByAppidAndUid(appid: string, uid: ObjectId) { const res = await this.db .collection('GroupApplication') - .aggregate([ - { $match: { appid } }, - { - $lookup: { - from: "Group", - localField: "groupId", - foreignField: "_id", - as: "group", - }, - }, - { $unwind: "$group" }, - { - $lookup: { - from: "GroupMember", - let: { groupId: "$groupId" }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ["$groupId", "$$groupId"] }, - { $eq: ["$uid", uid] }, - ], - }, - }, + .aggregate() + .match({ appid }) + .lookup({ + from: 'Group', + localField: 'groupId', + foreignField: '_id', + as: 'group', + }) + .unwind('$group') + .lookup({ + from: 'GroupMember', + let: { groupId: '$groupId' }, + pipeline: [ + { + $match: { + $expr: { + $and: [ + { $eq: ['$groupId', '$$groupId'] }, + { $eq: ['$uid', 'uid'] }, + ], }, - ], - as: "member", - }, - }, - { $unwind: "$member" }, - { - $project: { - _id: "$group._id", - name: "$group.name", - createdAt: "$group.createdAt", - updatedAt: "$group.updatedAt", - role: "$member.role", + }, }, - }, - ]) + ], + as: 'member', + }) + .unwind('$member') + .project({ + _id: '$group._id', + name: '$group.name', + createdAt: '$group.createdAt', + updatedAt: '$group.updatedAt', + role: '$member.role', + }) .toArray() return res From fd3d511204b38bf1d7c478e192bc4fbe6dcba80d Mon Sep 17 00:00:00 2001 From: nightwhite Date: Wed, 3 Jul 2024 05:06:31 +0800 Subject: [PATCH 3/5] fix2 --- server/src/group/group.service.ts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/server/src/group/group.service.ts b/server/src/group/group.service.ts index e7be3ce5cf..4513ed0f0a 100644 --- a/server/src/group/group.service.ts +++ b/server/src/group/group.service.ts @@ -32,23 +32,33 @@ export class GroupService { .match({ uid }) .lookup({ from: 'Group', - foreignField: '_id', - localField: 'groupId', + let: { groupId: '$groupId' }, pipeline: [ { $match: { - appid: null, - }, - }, + $expr: { + $and: [ + { $eq: ['$_id', '$$groupId'] }, + { $eq: ['$appid', null] } + ] + } + } + } ], as: 'group', }) .unwind('$group') .lookup({ from: 'GroupMember', - foreignField: 'groupId', - localField: 'groupId', + let: { groupId: '$groupId' }, pipeline: [ + { + $match: { + $expr: { + $eq: ['$groupId', '$$groupId'] + } + } + }, { $project: { _id: 0, From 866da2d1e6e745d921861439341f3aabc8b4e1cb Mon Sep 17 00:00:00 2001 From: nightwhite Date: Wed, 3 Jul 2024 05:19:46 +0800 Subject: [PATCH 4/5] fix --- server/src/group/group.service.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server/src/group/group.service.ts b/server/src/group/group.service.ts index 4513ed0f0a..c0eba82e51 100644 --- a/server/src/group/group.service.ts +++ b/server/src/group/group.service.ts @@ -39,11 +39,11 @@ export class GroupService { $expr: { $and: [ { $eq: ['$_id', '$$groupId'] }, - { $eq: ['$appid', null] } - ] - } - } - } + { $eq: ['$appid', null] }, + ], + }, + }, + }, ], as: 'group', }) @@ -56,8 +56,8 @@ export class GroupService { $match: { $expr: { $eq: ['$groupId', '$$groupId'] - } - } + }, + }, }, { $project: { From 5203c7677f508c4ea877e48ad96c0f23a859ea73 Mon Sep 17 00:00:00 2001 From: nightwhite Date: Wed, 17 Jul 2024 14:33:29 +0800 Subject: [PATCH 5/5] Update group.service.ts --- server/src/group/group.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/group/group.service.ts b/server/src/group/group.service.ts index c0eba82e51..7630508467 100644 --- a/server/src/group/group.service.ts +++ b/server/src/group/group.service.ts @@ -109,7 +109,7 @@ export class GroupService { $expr: { $and: [ { $eq: ['$groupId', '$$groupId'] }, - { $eq: ['$uid', 'uid'] }, + { $eq: ['$uid', uid] }, ], }, },