首页 > 解决方案 > 在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"]

标签: mongodbsearchtext

解决方案


你可以试试这个:

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"
    ]
}

推荐阅读