2012-10-16 3 views
1

내가 서브 루틴에서 다음 코드를 사용하여 $ 또는 BSON 쿼리를 만들려고 해요 :

bson * outBson = bson_create(); 
bson_init(outBson); 

    bson_append_start_object(outBson, "$query"); 
     bson_append_start_array(outBson, "$or"); 
      bson_append_int(outBson, "cpu", 2000); 
      bson_append_int(outBson, "ram", 4096); 
     bson_append_finish_array(outBson); 
    bson_append_finish_object(outBson); 

bson_finish(outBson); 

bson_print(outBson); 

하지만 mongo_find에서 내 반환 커서로 NULL 얻고있다(). 연결 mongo-> errstr 및 mongo-> err 코드를 덤핑하려했는데 그들은 모두 공백이고 0입니다.

기본적으로 $ 및 쿼리로 변경하면 bson_append_start/finish_array()를 사용하면 작동합니다 . (불행히도 $는 내가하려고했던 것이 아닙니다 ...)

누군가가 C 컴파일러를 통해 적절한 복합 쿼리 BSON을 어떻게 구성해야하는지 알려 주시면 감사하겠습니다.

몽고 쉘에서

, 내 데이터는 다음과 같은있다 :

> db.test.find() 
{ "_id" : ObjectId("507d20a72dfd5c5c2534d068"), "cpu" : 1600 } 
{ "_id" : ObjectId("507d23602dfd5c5c2534d069"), "cpu" : 2000 } 
{ "_id" : ObjectId("507d236c2dfd5c5c2534d06a"), "cpu" : 1666 } 
{ "_id" : ObjectId("507d23712dfd5c5c2534d06b"), "cpu" : 2333 } 
{ "_id" : ObjectId("507d254eef456cca26234013"), "cpu" : 2000, "ram" : 4096 } 
> db.test.find({ $or : [ {"cpu" : 1666}, {"cpu" : 2000} ] }) 
{ "_id" : ObjectId("507d23602dfd5c5c2534d069"), "cpu" : 2000 } 
{ "_id" : ObjectId("507d236c2dfd5c5c2534d06a"), "cpu" : 1666 } 
{ "_id" : ObjectId("507d254eef456cca26234013"), "cpu" : 2000, "ram" : 4096 } 

감사합니다.

답변

0

많은 실험을하고 소스를보고 나서 bson_append_int (bson * b, const char * name, const int i)가 실제로 int 유형의 객체를 추가하지 않는다는 것을 알았습니다. 나는 위의 건축 bson_print()를 가지고 무엇

했다 :

$or : 4  
    cpu : 16  2000 
    ram : 16  4096 

4 (16)가 각각 '배열'유형과 'INT'유형의 표시 ... INT의 이름은에도 ("cpu"와 "ram"), 그들은 객체가 아닙니다.

bson_init(outBson); 

bson_append_start_array(outBson, "$or"); 

    bson_append_start_object(outBson, "0"); 
     bson_append_int(outBson, "cpu", 2000); 
    bson_append_finish_object(outBson); 

    bson_append_start_object(outBson, "1"); 
     bson_append_int(outBson, "ram", 4096); 
    bson_append_finish_object(outBson); 

bson_append_finish_object(outBson); 

bson_finish(outBson); 
: 실제로 일을 무엇

등 등의 그리 익명 객체 래퍼를 제공하는 것이 었습니다

관련 문제