如何从聚合中的reduce或map中的文档字段声明变量?

叶印白

我有一个像下面这样的集合:

{
  id: 1,
  names: {
    first: 'Ana',
    second: '',
    third: 'Smith',
    four: 'Smitchd'
  },
  used: [
    {
      position: 'first',
      id: 'A'
    },
    {
      position: 'second',
      id: 'B'
    },
  ] 
}

我需要used names通过文档计算有多少集合,不包括那些是空的。

namesused的位置保存在一个名为 的数组中used

在示例中,我需要计算内部存在的名称used,但 innames不为空

我尝试使用reduce 遍历数组进行聚合used,我可以计算数组中的项目,但我不能使用reduce 中的字段名称。

db.collection.aggregate([
  { $match: id: 1 },
  { $project: { 
    totalUsed: $reduce: {
      input: '$used',
      initialValue: 0,
      in: { $add: ['$$value', { $cond: [{ $eq: ["$$name.$$this.position", '' ]}, 1, 0] }]}
    }
  }}
])

我 nedd 获得未使用空名称的计数...在示例中,我应该得到计数:1,因为即使在使用时存在 first 和 secodn,字段 names.second 也是空的。

叶印白

我解决了...

我将对象names转换为一个对象数组 ({ k: key, v: value }),然后我用names(new array)声明了一个变量,used并使用了一个 reduce insed。

我在新数组中寻找$$used.positionreduce中键的索引,然后比较值是否为“”,并根据情况添加1或0

db.collection.aggregate([
  { $match: id: 1 },
  {
    $project: {
      id: "$id",
      used: { "$used" },
      names: {  $objectToArray : "$names" },
    }
  },
  { 
    $project: {
     totalUsed: {
      $let: {
        vars: { names: "$names", used: "$used" },
        in: {
          $reduce: {
            input: "$$used",
            initialValue: 0,
            in: {
              $add: [
                "$$value",
                  {
                    $cond: [
                      { $eq: [{ $arrayElemAt: ["$$names.v", { $indexOfArray: ["$$names.k", "$$this.position"] } ]}, ""]},
                      0,
                      1
                    ]

                  }
              ]
            }
          }
        }
      }
     }
    }
  },
  {
    $group: { _id: "$id", used: { $sum:"$totalUsed" } }
  }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Mongo聚合中合并文档中的数组字段

来自分类Dev

如何构建聚合管道以根据其他文档中的字段值过滤文档?

来自分类Dev

如何在Mongoose中聚合嵌入式文档中的字段

来自分类Dev

MongoDB对数组foreach文档中的所有相同字段求和-Map-Reduce

来自分类Dev

Elasticsearch如何使用聚合对多个文档字段中的值进行计数

来自分类Dev

如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

来自分类Dev

Elasticsearch如何使用聚合对多个文档字段中的值进行计数

来自分类Dev

为MongoDB聚合查询中的每个文档提取大量字段

来自分类Dev

MongoDB聚合管道:计数文档中的字段是否小于值?

来自分类Dev

一个文档中的聚合 $group $sum 字段

来自分类Dev

聚合物中的“变量命名空间未声明”错误

来自分类Dev

如何计算Mongodb聚合中的字段

来自分类Dev

如何计算MongoDB聚合中的字段?

来自分类Dev

如何计算Mongodb聚合中的字段

来自分类Dev

聚合管道中的嵌入式文档集合中的参考文档字段

来自分类Dev

如何在 mongodb 聚合管道中限制 $group 中的文档?

来自分类Dev

如何在dbplyr中“安排”聚合变量?

来自分类Dev

如何使用聚合管道来查看哪些文档的字段包含以列表中任何字符串开头的字符串?

来自分类Dev

如何从数组中的文档投影特定字段?

来自分类Dev

如何更新mongodb中的文档字段?

来自分类Dev

如何访问mongo文档中的字段

来自分类Dev

在MongoDB中聚合异构文档

来自分类Dev

mongodb中的嵌套文档聚合

来自分类Dev

MongoDB聚合:将单独的文档字段投影到单个数组字段中

来自分类Dev

MongoDB聚合:将单独的文档字段投影到单个数组字段中

来自分类Dev

如何将Cloud Firestore中的单个文档字段保存到Flutter中的局部变量中?

来自分类Dev

如何在MongoDB聚合管道中隐藏单个子文档?

来自分类Dev

如何在ElasticSearch中聚合过滤的嵌套文档?

来自分类Dev

如何从MongoDB上的聚合中获取完整的文档

Related 相关文章

  1. 1

    如何在Mongo聚合中合并文档中的数组字段

  2. 2

    如何构建聚合管道以根据其他文档中的字段值过滤文档?

  3. 3

    如何在Mongoose中聚合嵌入式文档中的字段

  4. 4

    MongoDB对数组foreach文档中的所有相同字段求和-Map-Reduce

  5. 5

    Elasticsearch如何使用聚合对多个文档字段中的值进行计数

  6. 6

    如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

  7. 7

    Elasticsearch如何使用聚合对多个文档字段中的值进行计数

  8. 8

    为MongoDB聚合查询中的每个文档提取大量字段

  9. 9

    MongoDB聚合管道:计数文档中的字段是否小于值?

  10. 10

    一个文档中的聚合 $group $sum 字段

  11. 11

    聚合物中的“变量命名空间未声明”错误

  12. 12

    如何计算Mongodb聚合中的字段

  13. 13

    如何计算MongoDB聚合中的字段?

  14. 14

    如何计算Mongodb聚合中的字段

  15. 15

    聚合管道中的嵌入式文档集合中的参考文档字段

  16. 16

    如何在 mongodb 聚合管道中限制 $group 中的文档?

  17. 17

    如何在dbplyr中“安排”聚合变量?

  18. 18

    如何使用聚合管道来查看哪些文档的字段包含以列表中任何字符串开头的字符串?

  19. 19

    如何从数组中的文档投影特定字段?

  20. 20

    如何更新mongodb中的文档字段?

  21. 21

    如何访问mongo文档中的字段

  22. 22

    在MongoDB中聚合异构文档

  23. 23

    mongodb中的嵌套文档聚合

  24. 24

    MongoDB聚合:将单独的文档字段投影到单个数组字段中

  25. 25

    MongoDB聚合:将单独的文档字段投影到单个数组字段中

  26. 26

    如何将Cloud Firestore中的单个文档字段保存到Flutter中的局部变量中?

  27. 27

    如何在MongoDB聚合管道中隐藏单个子文档?

  28. 28

    如何在ElasticSearch中聚合过滤的嵌套文档?

  29. 29

    如何从MongoDB上的聚合中获取完整的文档

热门标签

归档