【问题标题】:How to use $toLower and $trim aggregation operators using MongoDB Java?如何使用 MongoDB Java 使用 $toLower 和 $trim 聚合运算符?
【发布时间】:2021-02-02 20:21:03
【问题描述】:

我有一个名为 Users 的集合,其中包含一个名为 Skills 的数组。

我使用以下代码展开技能数组并计算与每个技能关联的文档数:

Bson uw = unwind("$skills");
Bson sbc = sortByCount("$skills");
Bson limit = limit(10);
coll.aggregate(Arrays.asList(uw, sbc,limit)).forEach(printDocuments());

现在我想利用 $trim$toLower 操作进行上述聚合,因为在数据库中,一些技能以不同的方式保存(例如,“CSS”“CSS”“css”)。

我可以通过以下聚合在 mongo shell 中执行此操作:

db.users.aggregate([{$unwind:"$skills"} , {$sortByCount:{$toLower:{$trim:{input:"$skills"}}}}])

但是我在用 Java 实现它时遇到了麻烦。

你有什么想法吗?

【问题讨论】:

  • $trim$toLower 是聚合字符串运算符。这些可以(在您的情况下)在$addFields $project 阶段中​​使用。
  • @prasad_ 我可以在没有 $addFields$project 的情况下在 mongo shell 中使用这些聚合:db.users.aggregate([{$unwind:"$skills"}, {$sortByCount:{$toLower:{$trim:{input:"$skills"}}}}]) 但我正在努力在 Java 中实现它。你能帮我解决这个问题吗?
  • MongoDB Java 的Aggregates.sortByCount
  • @prasad_ 这个方法有一个参数:filter 而我的问题是com.mongodb.client.model.Filters 类既不包含$trim 也不包含$toLower。我也试过sortByCount("$toLower:{$trim:{input:"$skills"}}"),但它不起作用。
  • $unwind 阶段之后,您可以添加$addFields 阶段并使用运算符$trim$toLower - 应该没有任何问题。

标签: java mongodb aggregation-framework mongodb-java


【解决方案1】:

我设法找到了一种方法,将 sortByCount 更改为以下内容:

Bson sbc = sortByCount(eq("$toLower", eq("$trim", eq("input", "$skills"))));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2012-03-14
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多