mongocxx отличается от сопоставления с регулярным выражением - PullRequest
0 голосов
/ 28 января 2020

Следующий работающий код C ++ вернет все различные (уникальные значения) для данного поля:

document command;
command.append(
    kvp("distinct", "listings"), 
    kvp("key", "streetName")
);

Все различные значения получены, и вот пример выходных данных:

{
    "values": [
        "3rd street",
        "4th",
        "5th",
        ...
        "zion",
        "zuni"
    ],
    "ok": 1.0
}

В оболочке mongodb я могу использовать регулярное выражение , чтобы уменьшить различные значения до значений, начинающихся с 'glen':

db.listings.distinct(
    "streetName",
    { "streetName": {"$regex": /^glen/, "$options" : ""} }
)

Соответствие различные значения получены, и вот пример вывода:

["glen", "glendale", "glenfield"]

Проблема, с которой я столкнулся я не могу понять, как ограничить отдельные значения * теми , которые соответствуют шаблону регулярных выражений при использовании драйвера mon go -cxx :

document command;
command.append(
    kvp("distinct", "listings"), 
    kvp("key", "streetName"),
    kvp("streetName", bsoncxx::types::b_regex{ "^glen"})
);

Вот как выглядит команда, отправляемая на сервер mongoDB:

{
    "distinct": "listings",
    "key": "streetName",
    "streetName": {
        "$regex": "^glen",
        "$options": ""
    }
}

К сожалению, приведенная выше команда возвращает ошибку: BAD (поле BSON 'diver.streetName) '- неизвестное поле .: generi c ошибка сервера)

Hopefull y кто-то может помочь мне понять, как получить различные значения для подмножества данных (соответствующие документы).

1 Ответ

1 голос
/ 29 января 2020

Если вы не возражаете против прямого вызова distinct(), будет ли работать эта попытка перевести пример оболочки MongoDB, который вы предоставили, для вас?

db["listings"].distinct(
      "streetName",
       make_document(kvp("streetName", bsoncxx::types::b_regex{ "^glen" }))
);
...