2014-10-01 2 views
0

У меня есть следующий вариант:Преобразовать тип варианта BSON

type variant = {one}/{two:int}/{three:string}

Используя метод opa2doc(), я хочу, чтобы иметь возможность задать свою базу данных MongoDB для всех строк, который содержит конкретное значение варианта (один, два или три) без учета значений для каждого варианта. Я использую низкоуровневый API-интерфейс mongodb.

Я пытался что-то вроде:

opa2doc({ kind={two=_} })

, но это не работает.

Это работает для opa2doc({ kind={one} }), потому что у этого варианта нет прилагаемых данных.

Любая идея, как сделать эту работу?

ответ

1

Если вы хотите использовать привязку к родному MongoDB query API, вам, вероятно, потребуется создать надлежащий документ запроса MongoDB. Запросы на поиск шаблона (вместо сравнения с равенством) используют специальные значения query operators, которые являются значениями JSON. Высокоуровневый API-интерфейс Opa делает это для вас, используя свои собственные ML-подобные операторы. Native MongoDB документ запрос для Вашего случая потребуется $exists operator:

{ "kind.two": { $exists: true } } 

В старом синтаксисе должно быть:

Bson.opa2doc({ `kind.two`= { `$exists`= true } }) 
+0

Да, я попытался это и компилирует! Но MongoDB систематически возвращает 0! – gogson

+1

Вы проверили запрос в интерактивной консоли 'mongo'? Попробуйте «точечную нотацию»: '{" kind.two ": {$ exists: true}}'. –

+0

И это работает! Я уже пробовал, но имел синтаксическую ошибку! Я забыл использовать «оператор со старым (и удивительным) синтаксисом ocaml:' '' {'kind.two' = {' $ exists' = true}} '' ' – gogson

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