2013-03-29 2 views
1

I는 다음과 같이 보입니다 모음이 있습니다 N 요소를 선택하는 표준 방법이 있나요선택하여 MongoDB 문서

[ 
    { 
    "id": 1, 
    "tier": 0 
    }, 
    { 
    "id": 2, 
    "tier": 1 
    }, 
    { 
    "id": 3 
    "tier": 2 
    }, 
    { 
    "id": 4, 
    "tier": 0 
    } 
] 

을 어디에 가장 낮은 계층의 요소를 선택하는 probabilty p이고, 그 다음으로 낮은 계층은 (1- p) * p 등이며 임의의 표준 임의 선택이 가능합니다. 다음 그래서 예를 들어

, 가능성이 가장 높은 것은를 발생 내가 N = 2 위의 예제에 대한 쿼리 및 (난 항상 사실 생각) 어떤 페이지> 0.5을 실행하는 경우, 나는 돌아올거야 [{"id": 1, ...}, {"id": 4}]; n = 3이면 [{"id": 4}, {"id": 1}, {"id": 2}]

등. 여기 로 같은 사전을 주어 일부 의사 파이썬 코드는는 OBJS의 :

db.docs.ensureIndex({ random_point: '2d' })

임의의 점으로 문서의 무리를 만들려면 :

def f(objs, p, n): 
    # get eligible tiers 
    tiers_set = set() 
    for o in objs: 
    eligible_tiers.add(o["tier"]) 
    tiers_list = sorted(list(tiers_set)) 
    # get the tier for each index of results 
    tiers = [] 
    while len(tiers) < min(n, len(obis)): 
    tiers.append(select_random_with_initial_p(eligible_tiers, p)) 
    # get res 
    res = [] 
    for tier in tiers: 
    res.append(select_standard_random_in_tier(objs, tier) 
    return res 
+0

내가 요구 사항을 따르지 않는합니다. 질문을 편집하고 요구 사항을 의사 코드로 작성한 쿼리를 포함 할 수 있습니까? – WiredPrairie

+0

그게 도움이 되나요? –

+1

예, 조금 더 명확합니다. 그러나, 와우, :), 나는 그것을 취하고 어떤 직접적인 방식으로 작동하도록하는 어떤 방법을 보지 못합니다. 몇 가지 측면에 대해 집계 프레임 워크를 사용하면 운이 좋겠지 만 임의 선택은 전혀 매핑되지 않습니다. – WiredPrairie

답변

0

첫째, 컬렉션 지리 공간 색인을 사용 X 축에서 :

for (i = 0; i < 10; ++i) { 
    db.docs.insert({ key: i, random_point: [Math.random(), 0] }); 
} 

그런 다음 c에서 임의의 문서를 가져올 수 있습니다.

db.docs.findOne({ random_point : { $near : [Math.random(), 0] } }) 

을 또는 당신은 가까운 임의의 지점에 여러 문서를 검색 할 수 있습니다 :이 같은 ollection

db.docs.find({ random_point : { $near : [Math.random(), 0] } }).limit(4) 

이 단 하나의 쿼리없이 널 (null) 검사를 필요로 플러스 코드가 깨끗하고 간단하고 유연합니다. geopoint의 Y 축을 사용하여 쿼리에 두 번째 임의성 차원을 추가 할 수도 있습니다.

는 그 부분 [Math.random(), 0]을 변경할 수 있습니다, 사용자 정의 임의 선택을하려면, 그래서 가장 무작위로 분포

소스에 맞는 : Random record from MongoDB

+1

당신은 appboy https://www.mongodb.com/blog/post/remaining-agile-with-billions-of-documents-appboy-s-creative-mongodb-schemas의 문제를 어떻게 다뤘는지 여기에서 읽을 수 있습니다. utm_content = bufferfdcbd & utm_medium = 소셜 & utm_source = twitter.com & utm_campaign = 버퍼 – nickmilon