Соответствующие документы, которые содержат строковый массив, где хотя бы один из элементов массива не является пустой строкой - PullRequest
0 голосов
/ 24 июня 2019

У меня есть документы, которые содержат простые массивы строк, и я не могу установить фильтр, способный возвращать все документы, где в указанном поле массива есть хотя бы одна строка элемента, которая не является "". Это коллекция из 6500 документов, где 3700 должны соответствовать вышеуказанным критериям (я проверил, потянув все записи и выполнив фильтр на стороне клиента).

Я в основном использую драйвер в .NET, но я также возился с фильтром в Compass. Используя драйвер, я попробовал Ne, Not (Eq), AnyNe, Not (AnyEq), Nin [""], Not (In [""]). Я хотел бы использовать ElemMatch, но, похоже, он ориентирован на массивы документов, а не на массивы строк, поскольку вам нужно указать имя поля, которого в данном случае не существует. Я также попытался настроить фильтр .Where, который прошел через все, чтобы найти непустую строку в массиве, но он вызвал исключение во время выполнения (я кодирую в VB).

Builders(Of BsonDocument).Filter.AnyNe(Of String)("field", String.Empty)

Я ожидал бы, что вышеупомянутый фильтр, где "поле" является ссылкой на массив строк, вернет 3700 документов, но я получу 0.

Я бы предположил, что я явно что-то здесь упускаю, так как это не похоже на сложный запрос / фильтр для построения. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 июня 2019

Для всех, кто так запутался, как я:

Я упоминал ранее, что ElemMatch, похоже, предназначен для массивов документов, но, очевидно, если вы отказываетесь от использования классов Builder и вводите запрос вручную, вы можете использовать ElemMatch в .NET для запроса простого поля String Array, где по крайней мере одна запись не является пустой строкой "".

Правильный / рабочий пример: {"[array_field_name]": {$ elemMatch: {$ ne: ""}}}

Если кто-нибудь может сказать мне, как создать этот пример с использованием классов Builder, это было бы замечательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...