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

计数唯一键-mongo聚合管道

商正浩
2023-03-14

我有一个mongo搜索集。每个搜索都有一个criteria对象,该对象可以有任何条件组合。比如:

{
    "_id": 1,
    "criteria": {
        "state": ["NY", "IL"]
        ... 
    },
    ...
}

我正在构建一个mongo聚合管道,我想知道如何只投影密钥,以便我可以计算它们。

到目前为止,我的管道的第一步是:

db.userSearch.aggregate([
    { "$project": { "criteria":1 } },
    ...
])

这将正确返回所有criteria对象,现在我需要以某种方式投影键。有人有什么想法吗?

编辑:所需输出:{"state": 20,"平衡": 5,"geol定位": 10,...}

共有1个答案

田博超
2023-03-14

如果有人想知道,我使用mapReduce如下。

map = function() {
    Object.keys(this.criteria).forEach(function(k) {
        emit(k, 1)
    })
}

reduce = function(k, vals) {
    return Array.sum(vals)
}

db.userSearch.mapReduce(map, reduce, 'out')
 类似资料:
  • 我搜索了类似的问题,但没有找到任何问题。请随时为我指出他们的方向。 假设我有这个数据: 如果我想获取每个属性组的最新记录,我可以这样做: 我想让我的数据按属性分组,然后按id排序,这样每个组中只保留最新的记录,这就是我可以做到的。但我需要一种方法来避免在结果中命名我想要的所有字段(在本例中为“name”),因为在我的实际用例中,它们在前面是未知的。 那么,有没有办法做到这一点,但不必使用$last

  • 也许有人有一个好主意,我们可以如何修复或解决Azure Cosmos DB中MongoDB聚合管道的当前实现中的一个错误(所以是的:我们已经在实例上打开了该功能)。 简短的版本是:在我们看来,阶段之后的aggregation阶段不起作用。它从不返回任何结果。 假设您已经在一个有效的数据库中(使用< code>use 粘贴以下 JavaScript(如果通过 Azure 门户创建了集合,则此行是可选

  • 我有发票,每张发票都包含一个项目列表。每个项目都有(除其他外)以下字段: 姓名 数量 总计 每张发票都有(除其他外)字段: _id 创建 项目 发票存在于专门的Mongo集合中,称为发票。 我想获取包含指定项目的所有发票,其中每个发票都需要返回以下信息: _id 让我们称之为元组 如果发票列出给定项目两次,则相应的发票将生成两个投影实例。如果发票根本没有列出给定的项目,则结果中不存在此发票。 无论

  • 问题内容: 我需要一个可以根据键查找值的集合,反之亦然。每个值都有一个键,每个键都有一个值。有没有可以立即使用的数据结构呢? 问题答案: 该BIMAP从谷歌番石榴看起来会适合你。 双向映射(或“双向映射”)是一种保留其值以及其键的唯一性的映射。此约束使bimap可以支持“反向视图”,这是另一个bimap,它包含与此bimap相同的条目,但具有相反的键和值。 或来自Apache Commons Co

  • 我的应用程序使用Spring Boot/JPA/MongoDB。 我使用以下方法将域类映射到MongoDB 但找不到如何使我的DBRef字段唯一。

  • 在今天的任务中,我尝试在一个集合中聚合文档(我们称之为集合1),在管道的一个阶段中,我尝试使用$lookup从另一个集合中检索文档(我们称之为集合2)。 收集1对象模型: 收集2对象模型: 我正试图做的是从集合2的where字段3中检索文档。字段31等于集合1的值。 我的$查找阶段看起来像这样,但目前似乎不起作用。我没有发现任何线索,如果这应该工作,但期待着你的答复。 我希望避免拥有一个项目或一个