>백엔드 개발 >Golang >집계, 한 컬렉션의 데이터를 다른 컬렉션에 삽입

집계, 한 컬렉션의 데이터를 다른 컬렉션에 삽입

王林
王林앞으로
2024-02-10 23:30:19755검색

집계, 한 컬렉션의 데이터를 다른 컬렉션에 삽입

이 기사에서 PHP 편집자 Youzi는 한 컬렉션의 데이터를 다른 컬렉션에 삽입하는 일반적인 작업인 집계를 소개합니다. 집계 작업은 프로그래밍에서 매우 일반적이며 데이터 병합, 중복 제거, 필터링과 같은 다양한 시나리오에서 사용될 수 있습니다. 집계 작업을 통해 데이터를 쉽게 처리하고 관리할 수 있어 코드의 효율성과 가독성이 향상됩니다. 다음으로, 모든 사람이 이 기술을 더 잘 익힐 수 있도록 집계 작업의 사용 방법과 주의 사항을 자세히 소개하겠습니다.

질문 내용

특정 사용자의 chat 集合中获取聊天列表,并将发送的 message 컬렉션에 있는 마지막 메시지를 각 채팅의 해당 목록에 추가하기 위해 다음을 수행하려고 합니다.

이제 작동 방식은 아래에 설명된 두 가지 방법이 있습니다

먼저 채팅 회원 ID를 사용하여 채팅 목록을 가져오고, 두 번째 방법은 집계를 사용하여 각 채팅의 마지막 메시지를 찾은 다음 메시지를 채팅 ID와 일치시킵니다

좋아하는 채팅:

으아아아

P.S. lastmessage - 항상 0입니다. 사용자에 대한 응답을 작성하는 데만 필요합니다.

컬렉션message:

으아아아

첫 번째 방법: 특정 채팅 참가자의 활성 채팅 목록을 가져오려면 이 방법이 필요합니다.

으아아아

두 번째 방법: 각 채팅의 마지막 메시지를 얻으려면 이 방법이 필요합니다. 입력은 채팅 ID 세트이며, 각 채팅에 대해 마지막 메시지가 있는 경우 검색합니다. 이를 위해 집계를 사용합니다.

으아아아

이것이 정말 나쁜 해결책이라는 것을 알고 있지만 이것이 지금까지 제가 생각할 수 있는 전부이며 안타깝습니다(작동하지 않습니다). 나는 이 문제를 해결하려고 노력합니다

으아아아

내 질문은: 집계를 사용하여 특정 사용자에 대한 채팅 목록을 얻고 각 채팅에 대해 message 集合中添加对象 chat 컬렉션의 chat 개체에 있는 last_message 필드에 마지막 메시지를 추가하는 방법입니다. 현재 작동 방식:

type chat struct {
    id           string   `json:"id" bson:"id"`
    participants []string `json:"participants" bson:"participants"`
    lastmessage  *message `json:"last_message,omitempty" bson:"last_message"`
    ...
}

해결 방법

EDIT: 댓글에서 OP가 언급했듯이 update/$mergeto 컬렉션은 필요하지 않습니다.

$lookup의 하위 파이프라인에서 $sort + $limit 메서드를 간단히 실행할 수 있습니다. $unwind를 실행하여 검색 결과를 last_message 필드에 씁니다. 마지막으로 $lookup 的子管道中执行 $sort + $limit 方法。执行 $unwind 将查找结果写入 last_message 字段。最后,执行 $merge 以更新回 chat를 실행하여 chat 컬렉션으로 다시 업데이트하세요.

으아아아

몽고 놀이터

여기 오래된 mongo 놀이터$merge컬렉션으로 업데이트되었습니다.

위 내용은 집계, 한 컬렉션의 데이터를 다른 컬렉션에 삽입의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제