Найти первое слово предложения в mongodb указанного размера - PullRequest
0 голосов
/ 07 января 2020

Я хочу найти первое слово из предложения (фразы), размер которого меньше 3 букв. Есть ли способ, которым я мог бы его найти? пожалуйста, предложите.

Я использовал функцию

 .map(function(st){return st.split(" ")[0];} 

, она дает мне все первые слова в формате массива. Но это не ожидаемый вывод.

{"name ":" VAS LAYER BREED FARM PRIVATE LIMITED "}

{" name ":" UTTARA BROILER BREED FARM PRIVATE LTD "}

{" name ":" SAI REKHA POULTRY PRIVATE LTD "}}

{"name": "RUHITECH NUTRITION PRIVATE LTD"}

{"name": "SADKAR BROILER AND AGRO FARMS PRIVATE LTD"}

{"name": "SADAR POULTRY PRIVATE LTD"}

Из этого списка мне нужны выходные данные для печати только выходных данных: ("SAI", "VAS").

Ответы [ 4 ]

1 голос
/ 07 января 2020

Вы можете выполнить запрос агрегации.

db.collection.aggregate([
  {
    $project: {
      name: {
        $let: {
          vars: {
            first: {
              $arrayElemAt: [
                {
                  $split: [
                    "$name",
                    " "
                  ]
                },
                0
              ]
            }
          },
          in: {
            $cond: [
              {
                $lte: [
                  {
                    $strLenCP: "$$first"
                  },
                  3
                ]
              },
              "$$first",
              ""
            ]
          }
        }
      }
    }
  },
  {
    $match: {
      name: {
        $ne: ""
      }
    }
  },
  {
    $group: {
      _id: null,
      name: {
        $push: "$name"
      }
    }
  }
])

MongoPlayground

0 голосов
/ 08 января 2020

Если вы хотите сделать то же самое с javascript (как подсказывает ваш пример кода)

// Your question suggests you need words less than 3 length, so you can write
.map((st)=> st.split(" ")[0]).filter((str)=> str.length < 3)

// Your expected output suggests you need words less than or equal to 3 length, so you can write
.map((st)=> st.split(" ")[0]).filter((str)=> str.length <= 3)
0 голосов
/ 08 января 2020

Следующий запрос mon go shell напечатает все слова, которые меньше трех символов .

db.test.find().forEach( doc => {
    let words = doc.name.split(" ");
    for ( let word of words ) {
        if ( word.length < 3 ) {
            print( word );
            break;
        }
    }
} )

В запросе будет напечатан символ "&".

Если вы хотите, чтобы запрос печатал слова, содержащие не более трех символов, измените код word.length < 3 на word.length <= 3. Это напечатает «&», «SAI» и «VAS».

Если вы хотите, чтобы запрос печатал только слов с алфавитами (от A до Z и от a до z), измените ( word.length < 3 ) до ( word.length <= 3 && word.match("^[A-Za-z]+$") ). Это напечатает "SAI" и "VAS".

0 голосов
/ 07 января 2020

Насколько я понял из вашего вопроса, возможно, вы ищете это:

ВВОД

var arr = [{ "name" : "VAS LAYER BREEDER FARM PRIVATE LIMITED" },
{ "name" : "UTTARA BROILER BREEDER FARM PRIVATE LIMITED" },
{ "name" : "SAI REKHA POULTRY FARMS PRIVATE LIMITED" }
]

КОД

var outputArr = [];
for(let j=0; j<arr.length; j++){
    var chars = arr[j].name.split(' ');    
    for(let i=0; i<chars.length; i++){
        if(chars[i].length <= 3){
            outputArr.push(chars[i]);
            break;    
        }
    };
}

ВЫХОД

outputArr [ 'VAS', 'SAI' ]
...