Как искать символ за символом в текстовом поле массива mongodb? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть документы в mongodb, как:

[{
  "_id" : 1,
  "name" : "Himanshu",
  "tags" : ["member", "active"]
},{
  "_id" : 2,
  "name" : "Teotia",
  "tags" : ["employer", "withdrawal"]
},{ 
  "_id" : 3,
  "name" : "John",
  "tags" : ["member", "deactive"]
},{
  "_id" : 4,
  "name" : "Haris",
  "tags" : ["employer", "action"]
}]
  1. Я хочу найти здесь, если у нас есть массив фильтров типа {"tags" : ["member", "act"]}, он ответит на идентификаторы 1 и 2, потому что здесь member - полное совпадение и act частичное совпадение в двух документах.
  2. если у меня есть фильтр типа {"tags" : ["mem"] }, он должен отвечать идентификаторам 1 и 3
  3. Еще один случай. Если у меня есть фильтр типа {"tags" : ["member", "active"]}, то он должен отвечать только 1.

1 Ответ

0 голосов
/ 05 ноября 2018

Вам в основном нужны два понятия здесь.

  1. Преобразование каждой входной строки массива в регулярное выражение, привязанное к «началу» строки:

  2. Примените список с оператором $all, чтобы убедиться, что все совпадения совпадают:

    var filter = { "tags": [ "mem", "active" ] };
    
    // Map with regular expressions
    filter.tags = { "$all": filter.tags.map(t => new RegExpr("^" + t)) };
    // makes filter to { "tags": { "$all": [ /^mem/, /^active/ ] } }
    
    // search for results
    db.collection.find(filter);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...