首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mongo:添加字段并计算另一个字段出现的次数。

Mongo:添加字段并计算另一个字段出现的次数。
EN

Stack Overflow用户
提问于 2020-01-18 12:33:58
回答 1查看 698关注 0票数 1

我是MongoDB的新手。我正在用猫鼬和NodeJS编写一个应用程序。我从这个收藏开始:

代码语言:javascript
运行
AI代码解释
复制
[
  { name: "Joe", hobby: "Food"},
  { name: "Lyn", hobby: "Food"},
  { name: "Rex", hobby: "Play"},
  { name: "Rex", hobby: "Shop"},
  ...
]

我想用两个新字段输出文档的子集:nameCount显示文档名称值出现的次数,hobbyCount显示文档嗜好的相同内容:

代码语言:javascript
运行
AI代码解释
复制
[
  { name: "Joe", hobby: "Food", nameCount: 1, hobbyCount: 2 },
  { name: "Lyn", hobby: "Food", nameCount: 1, hobbyCount: 2 },
  { name: "Rex", hobby: "Play", nameCount: 2, hobbyCount: 1 },
  { name: "Rex", hobby: "Shop", nameCount: 2, hobbyCount: 1 }
]

从我的研究和摆弄,我得到了以下的查询工作,但它似乎是过头,低效和过于复杂。

代码语言:javascript
运行
AI代码解释
复制
db.members.aggregate([
  {$skip: 0},
  {$limit: 4},
  {
    $lookup: {
      from: "members",
      let: { name: "$name"},
      pipeline: [
        { $match: { $expr: { $eq: ["$name", "$$name"] } } },
        { $count: "count" }
      ],
      as: "nameCount"
    }
  },
  { $unwind: "$nameCount" },
  { $addFields: { nameCount: "$nameCount.count" } },
  {
    $lookup: {
      from: "members",
      let: { hobby: "$hobby"},
      pipeline: [
        { $match: { $expr: { $eq: ["$hobby", "$$hobby"] } } },
        { $count: "count" }
      ],
      as: "hobbyCount"
    }
  },
  { $unwind: "$hobbyCount" },
  { $addFields: { hobbyCount: "$hobbyCount.count" } }
]);

蒙戈游乐场

它尤其困扰着我,不仅是查询看起来有点过火,而且看起来我正在运行整个集合中找到的每条记录的两个新搜索,而也许可以在一个搜索中编译nameCounthobbyCount

更新

Valijon发布了一个答案,这让我意识到,当我试图发布最低要求时,我过于简化了我的实际问题。实际上,在我发布的第一次查找之前对集合进行了筛选(使用$match、$skip和$take)。因此,Valijon的回答实际上对我无效,尽管它是我最初提出问题的方式的一个很好的答案。抱歉,我在更新OP

看操场

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-18 15:30:25

编辑:我们只需要使用一个$lookup (我们的名字和爱好都匹配),并通过应用$filter$reduce运算符来计数nameCounthobbyCount

代码语言:javascript
运行
AI代码解释
复制
db.members.aggregate([
  {
    $skip: 1
  },
  {
    $limit: 2
  },
  {
    $lookup: {
      from: "members",
      let: {
        name: "$name",
        hobby: "$hobby"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $or: [
                {
                  $eq: [
                    "$name",
                    "$$name"
                  ]
                },
                {
                  $eq: [
                    "$hobby",
                    "$$hobby"
                  ]
                }
              ]
            }
          }
        }
      ],
      as: "count"
    }
  },
  {
    $project: {
      _id: 0,
      name: 1,
      hobby: 1,
      nameCount: {
        $reduce: {
          input: "$count",
          initialValue: 0,
          in: {
            $add: [
              "$$value",
              {
                $cond: [
                  {
                    $eq: [
                      "$name",
                      "$$this.name"
                    ]
                  },
                  1,
                  0
                ]
              }
            ]
          }
        }
      },
      hobbyCount: {
        $size: {
          $filter: {
            input: "$count",
            cond: {
              $eq: [
                "$hobby",
                "$$this.hobby"
              ]
            }
          }
        }
      }
    }
  }
])

MongoPlayground

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59804565

复制
相关文章
ARKit 教学:如何搭配SceneKit来建立一个简单的ARKit Demo设定ARKit SceneKit View从ARSCNView移除物件
增强现实(Argument Reality)来啰!记得宝可梦(Pokemon Go)吗?它当然也是增强现实的代表之一!Apple终于在iOS11将增强现实带进来,也因为iOS11,未来将会有数不清的iPhones和iPads就会搭载AR功能,这将会让ARKit成为世界最大的平台,是的,如果你对建置增强现实的Apps有兴趣,让你就来对地方了。
iOSDevLog
2018/08/22
1.8K0
ARKit 教学:如何搭配SceneKit来建立一个简单的ARKit Demo设定ARKit SceneKit View从ARSCNView移除物件
ARKit 初探
今年7月Apple推出了AR工具ARKit,着实闪着了大家的眼睛。从目前的评测可以知道 ARKit已经非常成熟,完全可以进行商用了。
音视频_李超
2020/04/01
2.4K0
ARKit 初探
到底有多强?苹果的增强现实框架:ARKit
写在前面 其实准备ARKit已经很久了,确切地说当WWDC开始介绍时就开始了。其后参加了苹果的ARKit workShop,加上自己有点事,所以文章一直没发出来,现在再发一篇上手文章,也没什么意义。
郭艺帆
2017/09/05
3.5K0
到底有多强?苹果的增强现实框架:ARKit
ARKit示例 - 第4部分:现实主义 - 照明和PBR
在本文中,我们将在场景中插入更逼真的虚拟内容。我们可以通过使用称为基于物理的渲染(PBR)的技术使用更详细的模型来实现这一点,并且还可以更准确地表示场景中的光照。
iOSDevLog
2018/09/20
1.3K0
ARKit示例 - 第4部分:现实主义 - 照明和PBR
ARKit示例 - 第2部分:平面检测+可视化
在我们的第一个hello world ARKit应用程序中,我们设置了我们的项目并渲染了一个虚拟3D立方体,可以在现实世界中渲染并在您移动时进行跟踪。
iOSDevLog
2018/09/20
3K1
ARKit示例 - 第2部分:平面检测+可视化
SceneKit_高级06_加载顶点、纹理、法线坐标
SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit_入门06_行为动画 SceneKit_入门07_几何体 SceneKit_入门08_材质 SceneKit_入门09_物理身体 SceneKit_入门10_物理世界 SceneKit_入门11_粒子系统 SceneKit_入门12_物理行为 SceneKit_入门13_骨骼动画 SceneKit_中级01_模型之间的过渡动画 SceneKit_中级02_SCNView 详细讲解 SceneKit_中级03_切换照相机视角 SceneKit_中级04_约束的使用 SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测 SceneKit_中级10_滤镜效果制作 SceneKit_中级11_动画事件 SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点 SceneKit_高级06_加载顶点、纹理、法线坐标 SceneKit_高级07_SCNProgram用法探究 SceneKit_高级08_天空盒子制作 SceneKit_高级09_雾效果 SceneKit_大神01_掉落的文字 SceneKit_大神02_弹幕来袭 SceneKit_大神03_navigationbar上的3D文字
酷走天涯
2022/05/13
9840
SceneKit_高级06_加载顶点、纹理、法线坐标
ARKit浅析V1.0
本文主要介绍了ARKit框架,包括其开发环境、实现原理、API以及使用场景。ARKit框架是苹果在WWDC2017上推出的,可以用于构建增强现实应用。本文从ARKit的介绍、工作原理、API介绍、使用场景以及一个3D虚拟物体的例子等方面进行了详细阐述。
MelonTeam
2018/01/04
1.9K0
ARKit浅析V1.0
ARKit和CoreLocation:第一部分
演示代码 ARKit和CoreLocation:第一部分 ARKit和CoreLocation:第二部分 ARKit和CoreLocation:第三部分
iOSDevLog
2018/09/20
2.3K0
ARKit和CoreLocation:第一部分
《 iPhone X ARKit Face Tracking 》
该文章讲述了作者从一名普通iOS开发者到Apple开发者的历程,包括开发经历、学习Apple官方文档、开发者社区、开发工具、代码仓库、团队协作、总结与收获。\n在开发过程中,作者通过学习Apple的官方文档,了解了Objective-C以及Swift编程语言,并逐渐掌握了iOS开发的核心概念。通过参加技术社区,了解到了ARKit、SceneKit、Core ML等框架,并深入学习了Objective-C与Swift编程语言的基础知识和最佳实践。在开发工具方面,作者使用了Xcode、Instruments、Sketch、Adobe XD、Figma等工具。在团队协作方面,作者通过使用GitHub进行版本控制,与团队成员进行代码共享、沟通、协作。\n通过开发iOS应用,作者深入了解了ARKit、SceneKit、Core ML等框架的原理和最佳实践,并逐渐掌握了基于这些框架的开发流程。同时,作者通过总结与收获,逐渐形成了一套适用于自己的iOS开发学习体系。\n
腾讯Bugly
2017/11/20
3.7K0
《 iPhone X ARKit Face Tracking 》
《iPhone X ARKit Face Tracking》
有幸去 Cupertino 苹果总部参加了 iPhone X 的封闭开发,本文主要分享一下iPhone X上使用 ARKit 进行人脸追踪及 3D 建模的相关内容。
腾讯Bugly
2018/03/23
2K0
ARKit:增强现实技术在美团到餐业务的实践
增强现实(Augmented Reality)是一种在视觉上呈现虚拟物体与现实场景结合的技术。Apple 公司在 2017 年 6 月正式推出了 ARKit,iOS 开发者可以在这个平台上使用简单便捷的 API 来开发 AR 应用程序。
美团技术团队
2019/03/22
2.1K0
ARKit:增强现实技术在美团到餐业务的实践
ARKit by Example - 第1部分:AR立方体
这篇第一篇文章将使用ARKit创建一个非常简单的hello world AR应用程序。最后,我们将能够在增强的世界中定位3D立方体,并使用我们的iOS设备移动它。
iOSDevLog
2018/09/20
1.3K0
ARKit by Example - 第1部分:AR立方体
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
OpenGL(八)--纹理相关API 1. 原始图像数据 //存储图像数据所占内存大小 size = 图像的高度 * 图像的宽度 * 每个像素所占字节数 像素所占字节数:一般为4Byte,包含RGBA四个通道,每个通道为1Byte(8Bit) 2. 认识函数 像素存储方式 //改变像素存储方式 void glPixelStorei(GLenum pname,GLint param); //恢复像素存储方式 void glPixelStoref(GLenum pname,GLint param); /
用户8893176
2021/08/09
1.3K0
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
ARKit 初学和发布会 Demo
增强现实技术(Augmented Reality,简称 AR) ,概念我就不说了百度百科会告诉你,下面是我在iOS ARKit发布会对iOS AR应用的理解。
星宇大前端
2019/01/15
7150
ARKit示例 - 第3部分:添加几何和物理乐趣
在上一篇文章中,我们使用ARKit来检测现实世界中的水平平面,然后将这些平面可视化。在本文中,我们现在将开始为我们的AR体验添加虚拟内容,并开始与检测到的平面进行交互。
iOSDevLog
2018/09/19
1K0
iOS版 使用ARKit和Swift创建交互式Domino游戏
在下面的教程中,我将向您展示如何使用Swift和ARKit制作有趣的Domino游戏。
iOSDevLog
2019/03/06
2.4K0
iOS版 使用ARKit和Swift创建交互式Domino游戏
SceneKit_入门08_材质
SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit_入门06_行为动画 SceneKit_入门07_几何体 SceneKit_入门08_材质 SceneKit_入门09_物理身体 SceneKit_入门10_物理世界 SceneKit_入门11_粒子系统 SceneKit_入门12_物理行为 SceneKit_入门13_骨骼动画 SceneKit_中级01_模型之间的过渡动画 SceneKit_中级02_SCNView 详细讲解 SceneKit_中级03_切换照相机视角 SceneKit_中级04_约束的使用 SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测 SceneKit_中级10_滤镜效果制作 SceneKit_中级11_动画事件 SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点 SceneKit_高级06_加载顶点、纹理、法线坐标 SceneKit_高级07_SCNProgram用法探究 SceneKit_高级08_天空盒子制作 SceneKit_高级09_雾效果 SceneKit_大神01_掉落的文字 SceneKit_大神02_弹幕来袭 SceneKit_大神03_navigationbar上的3D文字
酷走天涯
2022/05/13
1.3K0
SceneKit_入门08_材质
ARKit 简介
ARKit 简介 苹果在AR一直布局VR,最近的苹果开发者大会上,果家终于放出大招:iOS移动端ARKit平台以及VR兼容新桌面操作系统macOS High Sierra。 增强现实(AugmentedReality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。说起AR,其实它并不是第一次出现,不管在国内还是国外,好多大小公司都对AR有所涉猎,去年流行的Pokémon Go,阿里的AR红包,百度的AR地图…都是AR领
xiangzhihong
2018/02/06
2.6K0
ARKit 简介
ARKit 到底怎么实现的
Integrate iOS device camera and motion features to produce augmented reality experiences in your app or game
酷走天涯
2018/09/14
1.1K0
ARKit 到底怎么实现的
建立您的第一个AR体验
此示例应用程序运行ARKit世界跟踪会话,其内容显示在SceneKit视图中。为了演示平面检测,应用程序只需放置一个SCNPlane对象来可视化每个检测到ARPlaneAnchor对象。
iOSDevLog
2018/08/22
1.1K0
建立您的第一个AR体验

相似问题

从起始节点查找DAG中的所有路径

21

查找DAG上两个节点之间的所有路径

21

DAG在Web中不可见

1214

到达DAG中所有节点的最小节点数

21

使用贪心算法访问DAG中的所有节点

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档