2013-09-02 3 views
0

제 질문은 매우 간단합니다. OPANang 고급 데이터베이스 API를 사용하여 MongoDB와 같은 GROUP BY 문을 수행하고 싶습니다. 그러나 나는 그것이 가능하다고 생각하지 않는다 (?) 나는 MongoDB를의 $ 그룹 작업을 수행하려는 경우, 내가 반드시 낮은 수준의 API를 사용해야합니까OPA MongoDB 고급 API를 사용하는 기본 GROUP BY 문

(stdlib.apis.mongo를 사용하고 계십니까?)

마지막으로 저수준 및 고급 API를 모두 사용하여 MongoDB와 통신 할 수 있습니까?

감사합니다. 내가 어떤 집계가 지원되지 않습니다 최신 오파 컴파일러 코드 출판을 고려, 두렵다

답변

1

:(the thread in Opa forum를 참조 또한 대한 쿠엔틴의 의견을 유의하여 모두 낮은 및 높은 수준의 API-S :.

이 MLstate에서 사람에 의해 자동 증가 구현 조언을 참조하십시오 "당신은 [...] 함께이 [낮은 수준] 라이브러리와 내장 [높이 수준] 라이브러리를 사용할 수 있습니다" this thread 하이 레벨 DB 필드 /next_id 정의 및 초기화가 낮은 l 레벨 읽기 및 증가.

+0

그래서 내가 높은으로 집계 할 수없는 수준의 API를 사용할 수 있습니까? 내가 OPA 문서 http://doc.opalang.org/module/stdlib.apis.mongo/MongoCollection – gogson

+1

I 원칙 당신이 할 수있는 그룹/독특한/카운트 방법을 본 적이 그래도 난 오파에서 집계를 사용한 적이 . 지금까지 사용한 저수준 API의 유일한 부분은 포럼의 [카운터] (http://forum.opalang.org/0_323)입니다. :) –

0

나는 다른 생각을 가지고 있습니다.

모든 MongoDB 명령 (예 : 사용중인 "group"명령)은 $cmd이라는 가상 모음으로 액세스 할 수 있습니다. 서버에 {command_name: command_parameter, additional: "options", are: ["listed", "here"]} 문서를 찾도록 요청하면됩니다. MongoDB 서버의 모든 멋진 기능을 사용할 수 있어야하며, Opa API에는 지원되지 않으며 단일 찾기 쿼리가 있어야합니다. 여기에는 버전 2.2에서 도입 된 집계 프레임 워크와 버전 2.4부터 베타 버전으로 검색되는 전체 텍스트가 포함됩니다.

예를 들어, text 새 명령을 사용하여 coll_name 쿼리 문자열 query에 대한 전체 텍스트 색인을 검색하고 싶습니다.

{ search: query, project: {_id:0, id:1}, } 
|> Bson.opa2doc 
|> MongoCommands.simple_str_command_opts(ll_db, db_name, "text", coll_name, opts) 
|> MongoCommon.outcome_map(_, onsuccess, onfailure) 

그리고 당신은 API의 소스 코드를 보는 경우에, simple_str_command_opts : 나는 현재 (oncuccess 함수 답을 분석하고 발견 된 문서의 id -s를 얻는 것입니다) 코드를 사용하고 Mongo에 findOne()으로 구현됩니다.

하지만 그 대신 나는 높은 수준의 DB 지원을 사용할 수 있습니다

  1. 모든 : 포함 유형과 높은 수준의 DB 수집을 선언

    /test/`$cmd`[{text: coll_name, search: query, project: {_id: 0, id: 1}}] 
    

    당신이해야 할 무엇,이다 쿼리를 만드는 데 사용하는 필드,

  2. 가능한 답을 얻을 수있는 모든 필드text 명령에 대한

는 : 응용 프로그램 스타트 업 오파 런타임 DB 지원시 :( 작동하지 는 기본 키에 대한 고유 인덱스를 만들려고

type commands = { 
    // command 
    string text, 

    // query 
    string search, 
    { 
    int _id, 
    int id, 
    } project, 

    // result of executing command "text" 
    string queryDebugString, 
    string language, 
    list({ 
     float score, 
     {int id} obj, 
    }) results, 
    { 
    int nscanned, 
    int nscannedObjects, 
    int n, 
    int nfound, 
    int timeMicros, 
    } stats, 
    int ok, 
    // in case of failure (`ok: 0`) 
    string errmsg, 
} 

불행히도, 그것은이다 세트의 (예를 {text, search, project} 다음에 대한) : 당신이 findOne()를 사용해야하기 때문에 기본 키가 필요합니다 사용

database test { 
    article /article[{id}] 
    commands /`$cmd`[{text, search, project}] 
} 

을, 아니요 find()입니다. 가상 콜렉션 $cmd에 대한 색인 작성이 허용되지 않으며 DB 초기화가 실패합니다.

색인을 만들 수 오파을 막을 수있는 방법을 찾을 경우, 당신은 더 이상 다음 높은 수준의 API를 사용하지 몽고의 모든 멋진 기능을 사용할 수 있습니다)