MongoDB Aggregate search со списком строк, разделенных запятыми, в массиве - PullRequest
0 голосов
/ 28 мая 2020

У меня вопрос по MongoDB. У меня поиск в агрегации с $ match. Поиск должен проверять массив, если одно из значений соответствует значению массива внутри документов.

В качестве примера:

var stringList = 'general,online,offline'; //--> should check each value of this list

и два документа в качестве примера

    { 
"_id" : ObjectId("5e8f3a64ec717a0013d2f1f9"), 
"category" : [
    "general", 
    "online", 
    "internal", 
    "miscellaneous"
]},

{ 
"_id" : ObjectId("5e8f3afeec717a0013d2f1fa"), 
"category" : [
    "offline"
]

}

Я много пробовал, но не понял, как можно проверить каждое значение списка строк с каждым значением в массиве категорий. В моем примере должны быть показаны оба документа, но если я использую $ в строке, я не получаю никакого результата.

Я пробовал:

  • Разделить список запятой и картой
  • использование $ elemMatch
  • использование, если $ in
  • использование комбинации $ elemMatch и $ in

Надеюсь, я смогу объяснить свою проблему с помощью агрегирование.

Всем спасибо за помощь.

1 Ответ

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

У вас должна быть возможность разбить строку на , с помощью функции .split, а затем передать это в запрос $ in.

var stringList = 'general,online,offline';

db.documents.find( { "category" : { $in : stringList.split(",") } } );
{ "_id" : ObjectId("5e8f3a64ec717a0013d2f1f9"), "category" : [ "general", "online", "internal", "miscellaneous" ] }
{ "_id" : ObjectId("5e8f3afeec717a0013d2f1fa"), "category" : [ "offline" ] }

Вы также можете сделать это в сопоставлении $ в запрос агрегирования.

> db.documents.aggregate([
  { $match : { category: { $in : stringList.split(",") } }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...