[Mongodb] 룩업으로 결합된 소장 결과를sort 또는 limit 테스트로

11698 단어 MongoDBgolangtech

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)
// 結果のデコード処理は省略・・

좋은 웹페이지 즐겨찾기