我在使用spring boot从MongoDB检索数据时遇到以下问题。
这是我的架构:
class Item
{
@Id
String _id;
String description;
}
假设数据库有以下内容:
{"Id1", "carrot vegetable"},
{"Id2", "vegies is a brand"},
{"Id3", "I am Vegetarian"},
{"Id4", "Potato vegetable"},
{"Id5", "Fruits"}
我想要实现的是获得以“veg”开头的术语及其数量。 这就是这样的事情:
{"vegetable", 2},
{"vegies", 1},
{"vegetarian", 1}
到目前为止,我遇到了 IndexOfCP 操作,可以从字符串中找到子字符串。
db.Item.aggregate([ { $match:{ description:/veg/gi } }, { $project:{ index:{ $indexOfCP:[ { $toLower:"$description" }, "veg" ] }, description:1 } }, { $sort:{ index:1 } } ])
但我在结果集中找不到匹配的术语及其计数。
我如何在mongo命令和spring boot中执行此操作。
答案 0 :(得分:0)
db.Item.aggregate([
{ $match:{ description:/veg/gi } },
{
$project :{
matchedAndUniqWords:{
$reduce:{
input:{ $filter:{input:{$split:[{"$toLower":"$description"}," "]},as:"w",cond:{$ne:[{$indexOfCP:["$$w","veg"]},-1]}}},
initialValue:[],
in:{
$cond:[{$in:["$$this","$$value"]},{$concatArrays:[[],"$$value"]},{$concatArrays:[["$$this"],"$$value"]}]
}
}
}
}
},
{
$unwind:{path : "$matchedAndUniqWords"}
},
{
$group:{_id:"$matchedAndUniqWords",count:{"$sum":1}}
}]);