[MONGODB] 집계에 대한 구조 생성
MONGODB집계에 대한 구조 생성
그래서 여기에 질문입니다. 내가 뭘 원하는 입력 값 집합이 지정된 데이터 구조를 생성합니다.
이것은 여러 언어 제출이기 때문에,의 키 / 값 쌍의 배열로 입력 목록을 살펴 보자. 그러므로 해시,지도, 사전 또는 귀하의 보트를 수레 어떤 용어의 배열. 그 번역하는 보편적 충분히 / 디코드의 희망, JSON 여기에 모든 표기하겠습니다.
그래서 입력, 이제 우리가이 있다고 가정 해 봅시다 :
[ { "4": 10 }, { "7": 9 }, { "90": 7 }, { "1": 8 } ]
어쩌면 약간의 중복이 있지만, 그와 함께 스틱을 할 수 있습니다.
그 입력으로부터 그래서,이 구조에 도착합니다. 나는 전체 구조를주는거야,하지만 중요한 부분은 "무게"의 값을 반환됩니다 것입니다 :
[
{ "$project": {
"user_id": 1,
"content": 1,
"date": 1,
"weight": { "$cond": [
{ "$eq": ["$user_id": 4] },
10,
{ "$cond": [
{ "$eq": ["$user_id": 7] },
9,
{ "$cond": [
{ "$eq": ["$user_id": 90] },
7,
{ "$cond": [
{ "$eq": ["$user_id": 1] },
8,
0
]}
]}
]}
]}
}}
]
그림과 같이 입력을 사용하여 구조에서와 같이 솔루션 그래서 난으로 채워은 "무게"에 대한 구조 내용을 찾고 있어요.
예 구조의 번호와 같은 모습 숫자와 문자열이 아니라, 그래서 어떤 언어 구현해야하는 값은 JSON 버전은 정확히 같은 찾아야 인코딩.
또는, 나에게 일치하는 USER_ID에 따라 가중치를 할당 동일한 결과를 얻을 수있는 더 나은 방법을 제공합니다.
사람이에 대한 접근 방법이 있습니까?
나는 그냥 구조를 생성 할 수있는 방법을 볼 공정한 생각하는 어떤 언어 구현에 만족하실 것입니다.
나는 나 자신을 추가하려고 하겠지만, 명성은 좋은 구현에 간다.
해피 코딩.
해결법
-
==============================
1.나는 이것에 대해 생각하는 순간 있었을 때, 나는 펄 고향을 실행하고이 아웃을했다 :
나는 이것에 대해 생각하는 순간 있었을 때, 나는 펄 고향을 실행하고이 아웃을했다 :
use Modern::Perl; use Moose::Autobox; use JSON; my $encoder = JSON->new->pretty; my $input = [ { 4 => 10 }, { 7 => 9 }, { 90 => 7 }, { 1 => 8 } ]; my $stack = []; foreach my $item ( reverse @{$input} ) { while ( my ( $key, $value ) = each %{$item} ) { my $rec = { '$cond' => [ { '$eq' => [ '$user_id', int($key) ] }, $value ] }; if ( $stack->length == 0 ) { $rec->{'$cond'}->push( 0 ); } else { my $last = $stack->pop; $rec->{'$cond'}->push( $last ); } $stack->push( $rec ); } } say $encoder->encode( $stack->[0] );
그래서 과정은 눈부시게 간단했다.
그래서 필요하지만 중첩 된 출력의 자연 순서를 생산하지 않는 입력의 순서를 반대로으로 나열하는 등의 몇 가지가있다. 테스트 운영자는 간단한 것 같았다 있기 때문에, 그 밖에 "스택"에 대한 내 선택은 배열했다. 그러나 그것은 정말 재 사용, 증강 교체 받고 계속 특이 값입니다.
또한 JSON 인쇄 출력을 표시하는 단지가있다. 정말 스택의 결과 값입니다 원되는 모든 구조에 병합합니다.
그럼으로 나는이 중첩 된 구조를 생성하는 방법에 대한 영감을 얻었다 곳에서 OP 사용하는 언어이고, 루비에 대한 논리를 변환 :
require 'json' input = [ { 4 => 10 }, { 7 => 9 }, { 90 => 7 }, { 1 => 8 } ] stack = [] input.reverse_each {|item| item.each {|key,value| rec = { '$cond' => [ { '$eq' => [ '$user_id', key ] }, value ] } if ( stack.length == 0 ) rec['$cond'].push( 0 ) else last = stack.pop rec['$cond'].push( last ) end stack.push( rec ) } } puts JSON.pretty_generate(stack[0])
그리고 결국 최종 형태로 영업 이익이 원하는 것을 파이프 라인을 생성합니다 :
require 'json' userWeights = [ { 4 => 10 }, { 7 => 9 }, { 90 => 7}, { 1 => 8 } ] stack = [] userWeights.reverse_each {|item| item.each {|key,value| rec = { '$cond' => [ { '$eq' => [ '$user_id', key ] }, value ] } if ( stack.length == 0 ) rec['$cond'].push( 0 ) else last = stack.pop rec['$cond'].push( last ) end stack.push( rec ) } } pipeline = [ { '$project' => { 'user_id' => 1, 'content' => 1, 'date' => 1, 'weight' => stack[0] }}, { '$sort' => { 'weight' => -1, 'date' => -1 } } ] puts JSON.pretty_generate( pipeline )
있도록 USER_ID와 컬렉션의 정렬 결과에 고유 한 "무게"를 적용하기 위해 집합으로 전달되는 구조를 생성하는 방법이었다.
-
==============================
2.먼저 나를 위해, 여기에 여러분의 도움이 운동의 위대한 닐을 감사하고 정말 빠릅니다. mongoid 사용하는 분들이 내가 recommended_user_ids 배열입니다 무게 매개 변수를 작성하는 데 사용되는 것입니다 :
먼저 나를 위해, 여기에 여러분의 도움이 운동의 위대한 닐을 감사하고 정말 빠릅니다. mongoid 사용하는 분들이 내가 recommended_user_ids 배열입니다 무게 매개 변수를 작성하는 데 사용되는 것입니다 :
def self.project_recommended_weight recommended_user_ids return {} unless recommended_user_ids.present? {:weight => create_weight_statement(recommended_user_ids.reverse)} end def self.create_weight_statement recommended_user_ids, index=0 return 0 if index == recommended_user_ids.count {"$cond" => [{ "$eq" => ["$user_id", recommended_user_ids[index]] },index+1,create_weight_statement(recommended_user_ids,index+1)]} end
파이프 라인이 추가 그래서 단순히이 같은 해시를 병합 :
{"$project" => {:id => 1,:posted_at => 1}.merge(project_recommended_weight(options[:recommended_user_ids]))}
from https://stackoverflow.com/questions/22198172/generating-a-structure-for-aggregation by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게 효율적으로 MongoDB에 관련된 문제를 해결하기 위해? [닫은] (0) | 2019.12.10 |
---|---|
[MONGODB] 전화하여 MongoDB의 집계 내부 기능? (0) | 2019.12.10 |
[MONGODB] MongoDB를 집계 명령 / 파이프 라인에 행 번호의 어떤 종류를 추가 (0) | 2019.12.10 |
[MONGODB] 계산 조건에 몽고 정렬 (0) | 2019.12.10 |
[MONGODB] MongoDB를 단일 쿼리로 여러 카운트 (0) | 2019.12.10 |