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

Я хочу найти слова из предложения (фразы), у которого первый размер слова составляет 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"]

1 Ответ

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

Вы можете попробовать это:

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"
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...