当前位置: 首页 > 知识库问答 >
问题:

MongoDB使用Reduce进行Dedupe和排序

长孙诚
2023-03-14

我正在使用reduce数组创建字段的联接字符串

例如,假设我有一个子文档数组名为子文档并且每个子文档都有一个名称字段

例如:

[
   {name:"Zak"}, {name:"Bob"}, {name:"Sharon"}, {name:"Zak"}, {name:"Cindy"}, {name:"Bob"}, {name:"Peter"}
]

下面的表达式会给我一个“Zak,Bob,Sharon,Zak,Cindy,Bob,Peter,”的“CSV”;

(是的--我知道我可以使用$cond来检测最后一次迭代并删除trailing“,”

  uniqueCsv: {
   $reduce: {
     input: "$children",
     initialValue: '',
     in: {
       $concat: ["$$this.name", ", ", "$$value"]
     }
   }
  }

是否可以使用此reducededupesort以便我们可以

“Bob,Cindy,Peter,Sharon,Zak”

谢谢!

共有1个答案

关飞翼
2023-03-14
  • $setunionchildren.name中获取唯一元素,这将按升序对字符串排序
  • $concat将第一个参数作为$$value传递,如果value为空则将第二个参数作为条件传递,否则返回empty;第三个参数作为$$this表示当前字符串
db.collection.aggregate([
  {
    $project: {
      uniqueCsv: {
        $reduce: {
          input: { $setUnion: "$children.name" },
          initialValue: "",
          in: {
            $concat: [
              "$$value",
              { $cond: [{ $eq: ["$$value", ""] }, "", ", "] },
              "$$this"
            ]
          }
        }
      }
    }
  }
])

游乐场

 类似资料:
  • 挑战任务 初始文件index-start.html中提供了一个包含多个列表项的无序列表元素,每一个列表项均添加了data-time属性,该属性用分和秒表示了时间。要求将所有的时间累加在一起,并用时:分:秒来表示计算的结果。 实现效果 基本思路 1.取得所有li中data-time属性的值,将时间换算为秒并累加求得总时间(单位:秒); 2.手动计算将总时间转化为新的格式“XX小时XX分XX秒”; 3

  • 问题内容: 我被要求对数组进行排序和搜索。对数组进行排序很简单,我的代码也起作用了,但是每当我尝试调用二进制搜索方法时,它就可以对数组中的第一个元素起作用,但是结果是“ -1” 我的完整代码如下: 问题答案: 您搞砸了二进制搜索间隔

  • 目标 我想问一下这个问题: null 我想解决方案可能非常简单,就像查询本身一样,但这些是我在这种基础上迈出的第一步。提前感谢你在这方面的任何帮助。

  • 我正在努力得到正确的语法下面。我尝试过不同的工会,但都没有成功。 我需要将这三个总数相加为“totcount”。数据表非常大,希望找到一种比第4个子查询更好的方法来获取totcount。

  • The dedupe command isn’t necessary. yarn install will already dedupe.

  • 我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明