2017-02-14 25 views
1

Я пытаюсь добавить требование к моему запросу BCON, где «tribe_type» не равно «initial-public».

Мой исходный код был и работал:

query = BCON_NEW ("_id", BCON_OID(&oid)); 

Когда я добавляю вторую часть, она составляет, однако матч Монго не удается.

 query = BCON_NEW ("_id", BCON_OID(&oid), 
      "{", 
       "tribe_type", 
       "$ne", 
       "initial-public", 
      "}" 
     ); 

ответ

1

Вы должны указать тип ОСБК для UTF-8 строк.
Будьте осторожны с impliction $ и Будьте осторожны с вложенными документами и BCON.

query = BCON_NEW ("_id", BCON_OID(&oid), 
     "{", 
      "tribe_type", 
      "$ne", 
      "initial-public", 
     "}" 
    ); 

компилирует в эту команду

{ "_id" : <an oid> }, { "tribe_type" : "$ne" } 

который, очевидно, не то, что вы хотите.

быть явно с $ и операции, правильно введите строку в поле UTF8, и убедитесь, что вы собираете вложенные документы, как это:

query = BCON_NEW (
       "$and", "[", "{", "_id", BCON_OID(&oid), "}", 
          "{", "tribe_type", "{", "$ne", BCON_UTF8 ("initial-public"), "}", "}","]" 
       ); 

дает запрос, который выглядит как этот

{ "$and" : [ { "_id" : <an oid> }, { "tribe_type" : { "$ne" : "initial-public" } } ] } 

это, вероятно, то, что вы хотите.

+0

Большое спасибо за объяснение. Пока я выяснил решение, ваше лучше и гораздо более информативно. Благодаря :) –

0
 query = BCON_NEW ("_id", BCON_OID(&oid), 
      "tribe_type", 
       "{", 
        "$ne", BCON_UTF8 ("initial-public"), 
        "}"); 
+0

После того, как я понял, я опубликовал полностью действующий код. –

 Смежные вопросы

  • Нет связанных вопросов^_^