Искать строку в другом массиве, например строку в mongodb - PullRequest
2 голосов
/ 07 мая 2020

Я хочу сделать запрос в mongodb для поиска строки в другой строке. Теперь вариант использования: у меня есть документ вроде:

{
    "names":"[John,Mike,Stephen,Rock]"
}

Теперь я хочу создать фильтр, который будет искать:

  1. Случай-1: Если Джон присутствует в именах или нет
  2. Случай-2: Если Джон и Майк оба присутствуют в этой строке

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

Ответы [ 2 ]

1 голос
/ 07 мая 2020

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

Случай 1: Проверить names строковое поле содержит слово John.

db.collection.find({ names: /John/})

Случай 2: Проверить names строковое поле содержит как John, так и Mike слова.

db.collection.find({ names: {$all : [/John/, /Mike/]}})

Я бы посоветовал иметь индекс в поле names и попробовать использовать текстовый поиск , если возможно.

Ссылка: $ все

0 голосов
/ 07 мая 2020

Используйте оператор $ in для сопоставления значений в массиве в MongoDb:

Предположим, что инвентарь коллекции содержит документы, которые включают теги полей, как показано ниже:

{ _id: 1, item: "abc", qty: 10, tags: [ "school", "clothing" ]}

Then , следующая операция find () получит поле тегов, которое содержит массив, по крайней мере, с одним элементом, подходящим либо «техника», либо «школа».

db.inventory.find({ tags: { 
        $in: ["appliances", "school"] } 
});

Для вашего варианта использования 1:

db.users.find({names : "John"});

Для вашего варианта использования 2:

db.users.find({ names: { 
       $in: ["John", "Mike"]
 } });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...