在指定大小的 mongodb 中查找句子的第一个单词

To find first word of a sentence in mongodb of specified size

我想从小于 3 的句子(短语)中找到第一个单词 letters.Is 有什么办法可以找到它吗?请提出建议。

我用过

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

函数它给了我数组中的所有第一个单词format.But这不是预期的输出。

{ "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")。

根据我从你的问题中了解到的情况,你可能正在寻找这个:

输入

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' ]

您可以进行聚合查询。

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

下面的mongoshell查询将打印所有少于三个字符的单词。

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".

如果您想使用 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)