[Mongodb] 룩업으로 결합된 소장 결과를sort 또는 limit 테스트로
lookup 정보
MongoDB의 버전 3.2 이후
lookup
를 사용하여 다른 소장품과 결합할 수 있다.상세한 내용은 여기.의 문서에서 기본 규격은 왼쪽 외부와 결합하고 목표 데이터를 합병하여 수조 형식으로 얻는다.구체적인 데이터의 획득에 관해서 나는 Mongodb로 JOIN씨 일을 해보도록 하겠습니다.의 문장이 사람들에게 인상을 남기기 쉽다고 생각한다.하고 싶은 일
그렇다면 합병지 소장품에서 얻은 배열에sort나limit을 추가할 수 있을까? 이번 보도다.버전 3.6 이후 룩업
pipeline
에서 사용할 수 있으며 추출 조건 등을 쓸 수 있다.pipeline의 상세한 상황은 Mongodb로 컬렉션 연결하는 방법에 설명되어 있다.어떻게sort와limit을 씁니까
MongoDB $lookup with max document by date의 글에서 보듯이pipeline에sort와limit을 지정합니다.
샘플
예를 들어
user
컬렉션을 결합 소스로 설정하고 결합 목표post
를 컬렉션으로 설정할 때 Golang의 실시 예는 다음과 같다.user
수집한 _id
열을 키로 조합한다.또한 조회 부분만 열거되어 있기 때문에 연결 위치 등의 설치는 참조MongoDB.com 공식 Go 드라이버 사용 기본 조작.sample.go
// 接続処理は省略・・・
col := c.Database(os.Getenv("DB_NAME")).Collection("user")
// pipleLineの内容を配列に格納
pipleLineLookup := bson.A{}
// pipeLineに含めるlimit
pipleLineLookup = append(pipleLineLookup, bson.D{{Key: "$limit", Value: limit}})
// pipeLineに含めるsort
pipleLineLookup = append(pipleLineLookup, bson.D{{Key: "$sort", Value:bson.D{{Key: "post_date", Value: -1},
}}})
// 結合用の配列
var eqBsonA bson.A
eqBsonA = append(eqBsonA, "$$user_id")
eqBsonA = append(eqBsonA, "$post_user_id")
pipleLineLookup = append(pipleLineLookup, bson.D{{Key: "$match", Value: bson.D{{Key: "$expr", Value: bson.D{{Key: "$eq", Value: eqBsonA}}}}}})
// lookupの文
lookupStage := bson.D{{Key: "$lookup", Value: bson.D{
{Key: "from", Value: "post"},
{Key: "let", Value: bson.D{{Key: "user_id", Value: "$_id"}}},
{Key: "pipeline", Value: pipleLineLookup},
{Key: "as", Value: "posts"},
}}}
projectStage := bson.D{{Key: "$project", Value: bson.D{
{Key: "_id", Value: 1},
{Key: "name", Value: 1},
{Key: "posts._id", Value: 1},
{Key: "posts.contents", Value: 1},
{Key: "posts.post_date", Value: 1},
}}}
pipeLine := mongo.Pipeline{lookupStage, projectStage}
cur, err := col.Aggregate(context.Background(), pipeLine)
// 結果のデコード処理は省略・・
Reference
이 문제에 관하여([Mongodb] 룩업으로 결합된 소장 결과를sort 또는 limit 테스트로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/someone7140/articles/2470142264ebe7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)