mongodb - 在mongodb中查找指定大小的句子中的第一个和第二个单词
问题描述
我想从第一个单词大小为 3 且小于 3 个字母且第二个单词大小为 5 且小于 5 个相同句子的句子(短语)中找到单词。有什么办法可以找到吗?请建议。
以下是句子列表:
{ "name" : "VAS LAYER BREED FARM Pvt LIMITED" }
{ "name" : "UTTARA BROILER BREED FARM PRIVATE Limited" }
{ "name" : "SAI REKHA POULTRY PRIVATE LTD" }
{ "name" : "RUHITECH NUTRI PRIVATE LTD" }
{ "name" : "SADKAR BROILER AND AGRO FARMS PRIVATE LTD" }
{ "name" : "SADAR POULTRY PRIVATE LTD" }
预期输出:
["VAS","LAYER",
"SAI","REKHA"]
解决方案
你可以试试这个:
db.yourCollectionName.aggregate([{
// Split sentence into array & get only first two words
$addFields: {
wordsArr: { $slice: [{ $split: ["$name", " "] }, 2] }
}
}, { // check lengths of each word
$addFields: {
lengths: {
$map: {
input: '$wordsArr',
as: "each",
in: { $strLenCP: "$$each" }
}
}
}
}, { // check conditions & form wordsArr
$project: {
name: 1,
wordsArr: {
$cond: [{ $and: [{ $lte: [{ $arrayElemAt: ["$lengths", 0] }, 3] }, { $lte: [{ $arrayElemAt: ["$lengths", 1] }, 5] }] }, "$wordsArr", []]
}
}
}, { // filter out empty wordsArr i.e; no condition met
$match: { wordsArr: { $ne: [] } }
}])
收集数据:
/* 1 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb231"),
"name" : "VAS LAYER BREED FARM Pvt LIMITED"
}
/* 2 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb232"),
"name" : "UTTARA BROILER BREED FARM PRIVATE Limited"
}
/* 3 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb233"),
"name" : "SAI REKHA POULTRY PRIVATE LTD"
}
/* 4 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb234"),
"name" : "RUHITECH NUTRI PRIVATE LTD"
}
/* 5 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb235"),
"name" : "SADKAR BROILER AND AGRO FARMS PRIVATE LTD"
}
/* 6 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb236"),
"name" : "SADAR POULTRY PRIVATE LTD"
}
/* 7 */
{
"_id" : ObjectId("5e16c36f627ef782362cb9ca"),
"name" : "VAS "
}
/* 8 */
{
"_id" : ObjectId("5e16c37c627ef782362cbbcf"),
"name" : "VA LAYER BREED FARM Pvt LIMITED"
}
/* 9 */
{
"_id" : ObjectId("5e16c38a627ef782362cbd14"),
"name" : "VAS YER BREED FARM Pvt LIMITED"
}
结果 :
/* 1 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb231"),
"name" : "VAS LAYER BREED FARM Pvt LIMITED",
"wordsArr" : [
"VAS",
"LAYER"
]
}
/* 2 */
{
"_id" : ObjectId("5e16bd18c952870d7dfbb233"),
"name" : "SAI REKHA POULTRY PRIVATE LTD",
"wordsArr" : [
"SAI",
"REKHA"
]
}
/* 3 */
{
"_id" : ObjectId("5e16c36f627ef782362cb9ca"),
"name" : "VAS ",
"wordsArr" : [
"VAS",
""
]
}
/* 4 */
{
"_id" : ObjectId("5e16c37c627ef782362cbbcf"),
"name" : "VA LAYER BREED FARM Pvt LIMITED",
"wordsArr" : [
"VA",
"LAYER"
]
}
/* 5 */
{
"_id" : ObjectId("5e16c38a627ef782362cbd14"),
"name" : "VAS YER BREED FARM Pvt LIMITED",
"wordsArr" : [
"VAS",
"YER"
]
}