如何根据条件 $push 字段?

2024-03-26

我试图在 MongoDB 聚合管道的 $group 阶段有条件地将字段推入数组。

本质上,我有包含用户名的文档以及他们执行的一系列操作。

如果我将用户操作分组如下:

{ $group: { _id: { "name": "$user.name" }, "actions": { $push: $action"} } }

我得到以下信息:

[{
    "_id": {
        "name": "Bob"
    },
    "actions": ["add", "wait", "subtract"]
}, {
    "_id": {
        "name": "Susan"
    },
    "actions": ["add"]
}, {
    "_id": {
        "name": "Susan"
    },
    "actions": ["add, subtract"]
}]

到目前为止,一切都很好。现在的想法是将动作数组组合在一起,看看哪些用户操作集是最受欢迎的。问题是我需要在考虑该组之前删除“等待”操作。因此,考虑到分组中不应考虑“wait”元素,结果应该是这样的:

[{
    "_id": ["add"],
    "total": 1
}, {
    "_id": ["add", "subtract"],
    "total": 2
}]

Test #1

如果我添加这个 $group 阶段:

{ $group : { _id : "$actions", total: { $sum: 1} }}

我得到了我想要的计数,但它考虑了不需要的“等待”数组元素。

[{
    "_id": ["add"],
    "total": 1
}, {
    "_id": ["add", "subtract"],
    "total": 1
}, {
    "_id": ["add", "wait", "subtract"],
    "total": 1
}] 

Test #2

{ $group: { _id: { "name": "$user.name" }, "actions": { $push: { $cond: { if: 
{ $ne: [ "$action", 'wait']}, then: "$action", else: null } }}} }


{ $group : { _id : "$actions", total: { $sum: 1} }}

这是我所得到的最接近的结果,但这会将空值推入等待的位置,并且我不知道如何删除它们。

[{
    "_id": ["add"],
    "total": 1
}, {
    "_id": ["add", "subtract"],
    "total": 1
}, {
    "_id": ["add", null, "subtract"],
    "total": 1
}]

UPDATE:

我的简化文档如下所示:

{
    "_id": ObjectID("573e0c6155e2a8f9362fb8ff"),
    "user": {
        "name": "Bob",
    },
    "action": "add",
}

你需要一个初步的$match https://docs.mongodb.com/manual/reference/operator/aggregation/match/管道中的阶段仅选择“操作”不等于“等待”的文档。

db.collection.aggregate([
    { "$match": { "action": { "$ne": "wait" } } },
    { "$group": { 
        "_id": "$user.name", 
       "actions": { "$push": "$action" }, 
       "total": { "$sum": 1 } 
    }}
])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据条件 $push 字段? 的相关文章

  • MongoDB BasicDBObject 与 Java 中的文档

    我正在使用 MongoDB v3 2 0 和 Mongo Java Driver 3 0 4 版本 我正在使用BasicDBObject 已弃用 而不是使用Document在 java 中 因为我需要在独立的 java 项目中进行许多更改才
  • Mongoose Date.now 时间不准确

    在过去的两个小时里 我一直在抓狂 起初我以为 Moment js 是没有返回正确时间的罪魁祸首 但其实是 mongoose Date now 做了一些邪恶的事情 这是代码 const moment require moment const
  • Spring Data Mongo 无法找到 Enum 的 PersistentEntity

    编辑 我发现了一个相关问题here https stackoverflow com questions 28972455 does spring data mongodb support enums 但仅有的两个答案相互矛盾 并且没有足够的
  • 使用 spring data mongodb 存储库添加可选查询参数

    我想使用 spring data mongodb 添加可选查询参数 控制器代码 RestController private final ActionService actionService RequestMapping value ac
  • 在 mongodb shell 中打印文档值

    我想在 mongo shell 中打印此 JSON 文档的值 就像简单的控制台输出一样 无需创建新的集合或文档 提前致谢 我找到了一个解决方案 通过使用 forEach 应用 JavaScript 方法 db widget find id
  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • 如何提高 MongoDB 中 update() 和 save() 的性能?

    我正在寻找有关如何在以下情况下提高数据库性能的提示 作为示例应用程序 我今天编写了一个相当简单的应用程序 它使用 Twitter 流 API 来搜索某些关键字 然后将结果存储在 MongoDB 中 该应用程序是用 Node js 编写的 我
  • 将 $lookup 结果合并到现有数组

    我是 mongo 新手 我需要你的帮助 我有收藏学习计划 这是示例文档 id dGFY garranti typ sk garant en Chairman of study board id 1025769 typ sk predseda
  • 将图像存储在 Mongodb 中并使用 Nodejs 提供服务

    我知道 Mongodb 可以通过两种方式存储图像 通过将图像存储为二进制在常规文档中 通过 Gridfs 管理更大的图像 为简单起见 并且因为我计划服务器的图像很小 所以我将选择选项 1 为了将图像提供给浏览器 我使用的是nodejs 我的
  • 需要对 mongodb 中的数组对象值求和

    如果该值存在 我正在尝试计算总价值 但查询并不能 100 工作 那么有人可以帮我解决这个问题吗 这是我的示例文档 我附上了两份文件 请提供这些文件并找出最佳解决方案 文件 1 id 1 message count 4 messages da
  • FindAndUpdate 如何检查文档是否真的更新

    想象一下以下模型 var Office id 1 name My Office branches adddress Some street that avenue isPrincipal true adddress Another addr
  • 当前文档字段值内的地理空间 $near

    采取这个查询 location near x y maxDistance this field 我想将当前评估文档中指定字段的值分配给 maxDistance 那可能吗 是的 这是可能的 你只需使用 geoNear https docs m
  • mongodb 中的 $size 与条件

    我正在使用聚合从两个集合中获取值 一个是文件夹 另一个是检查 我正在获取所有数据 但检查计数为 0 我的代码 mongo folder aggregate lookup from inspections localField id fore
  • 使用mongodb+srv配置Mongo

    我在 docker 上启动 mongo 所以默认主机 localhost port 27017 用户名 root密码 example 现在我想通过连接字符串进行连接 mongodb srv root example localhost si
  • 将图像文件存储在猫鼬模式的二进制数据中并以html形式显示图像

    我正在使用 Express Node js 和 Mongodb 创建上传和显示图像文件的网页 我使用 schema 将图像的二进制文件保存在 mongodb 中 这是我在index js和db js中的一点代码 var Post mongo
  • mongodb c# 选择特定字段

    需要一些帮助来创建generic按名称选择字段的方法 像这样的东西 T GetDocField
  • Nodejs + mongodb:如何查询 $ref 字段?

    我将 MongoDB 与 Nodejs REST 服务一起使用 该服务公开了存储在其中的数据 我有一个关于如何查询使用 ref 的数据的问题 这是一个对象的示例 其中包含对花药集合中另一个对象 详细信息 的引用 id ObjectId 59
  • 从 MongoDB+Node.js 获取数据到客户端 JavaScript

    如何使用 Node js 连接 MongoDB 然后将结果传递给客户端 JavaScript 并以 HTML 形式显示 var http require http var URL require url var Db require mon
  • RoboMongo:不显示所有文档

    当我打开集合时 它仅显示前 50 个文档 而不是全部文档 如何使 RoboMongo 显示集合中的所有文档 最好是自动 罗博蒙戈结果 https i stack imgur com K5fn8 png 2019 年 12 月 6 日更新 最
  • java.lang.IllegalArgumentException:预期唯一结果或 null,但得到多个! - Spring Data Mongo

    我在用着Spring Boot v2 2 2 RELEASE and Spring Data MongoDB 在此示例中 我正在查找按部门代码执行组并获取该组下的所有员工 样本数据 firstName Laxmi lastName Para

随机推荐

  • Qt 程序挂起(无响应)直到函数结束然后再次开始工作

    我在 Qt 中有一个 UI 应用程序 有几个函数可以运行大规模 SQL 查询 返回数千个结果 当单击运行此查询的按钮时 UI 窗口立即变为 无响应 但是我可以从控制台输出中看到 所有内容实际上仍在后台运行 一旦函数结束 数据就会按预期显示
  • mvc4 中没有为此对象定义无参数构造函数

    using Michell ClaimsAuditAdmin Models using Mitchell ClaimsAuditAdmin Repositories using Mitchell ClaimsAuditAdmin Web M
  • 为什么 sys.exit() 会导致回溯?

    根据如何在不回溯的情况下退出Python https stackoverflow com q 1187970 3357935 呼叫sys exit 在 Python 脚本中应该静默退出而不进行回溯 import sys sys exit 0
  • 面向 Android 12 及更高版本的应用需要为“android:exported”指定显式值 [Cordova]

    当我在 GitHub 中运行 Apk 时 出现错误 当我在 GitHub 中构建 Apk 时 无法定义清单内的某些内容 因为它每次都是新鲜构建的 我所能做的就是在 Config Xml 文件中 添加后android exported fal
  • 在 Android Edittext 中设置特定文本的文本颜色

    如果用户键入一个字符串并且它包含 我想将文本的颜色更改为红色 我尝试过使用 textwatcher 但出现堆栈溢出错误 我只想在 开头时更改颜色 代码如下 topic addTextChangedListener new TextWatch
  • 可重入锁用例

    我对Java的多线程概念很差 我正在了解 ReentrantLock 的功能和用法 我发现它比同步更灵活 并且添加了更多功能 我可以看到上面提到的例子并且我很好地理解了 我无法弄清楚它到底对业务有何帮助的实时场景 我认为最好避免僵局 有人可
  • 对话框中的 Xtext DSL 嵌入式编辑器

    我是 xtext 的新手 我已经使用 xtext 创建了 DSL 并且生成了工件 这生成了具有许多功能 如内容辅助和语法着色 的编辑器 现在的问题是我想将编辑器嵌入到对话框中 为了实现此目的 我使用嵌入式编辑器 我能够获取嵌入式编辑器并将其
  • C++ 父类对齐

    是否可以指定父类的对齐方式 例如类似的东西 未编译 template
  • 检查是否已经是用户然后插入数据库 php

    如果我想插入数据库 我的代码可以工作 但是我检查用户是否已经存在不起作用 我认为这个想法是检查该用户名是否已经存在一行 如果是 则不要将该用户添加到数据库中 否则 email POST email password password has
  • 全局应用程序中的个人名称:存储什么[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Storing 个人姓名 http en wikipedia org wiki Personal name对于来自许多不同国家的用户使
  • 软件包“pecl.php.net/intl”没有可用的版本

    我正在尝试为 php 安装 intl 当我跑步时sudo pecl install intl它给了我一个错误No releases available for package pecl php net intl 我尝试过清除缓存 也尝试过升
  • 使用 bash 从文本文件中读取字符

    有谁知道如何使用 bash 脚本从文件中读取前两个字符 有问题的文件实际上是一个 I O 驱动程序 其中没有换行符 并且实际上无限长 The read内置支持 n范围 echo Two chars while read n 2 i do e
  • 从 Web 项目中排除 node_modules 目录

    如果我右键单击我的项目并选择 发布 Web 项目 我将收到有关目录名称长度的错误 我已经追踪到了node modules 我想从进程中排除该目录及其内容 我们使用一个 pubxml文件 我尝试添加以下内容之一或以下内容的组合
  • 强制渲染已计算的反应元素

    我正在尝试构建一个闪亮的应用程序 通过不同的 render 函数输出多个结果 问题是其中一个结果需要一些时间来计算 所以我希望shiny能够尽快渲染出快速的结果 这是一些代码来说明 ui R library shiny shinyUI fl
  • C++20 模块导出模板实例化

    我正在创建一个库 并且 C 20 模块内有一个类模板 我想添加一个实例化 以减少使用我的库的每个项目的编译时间 这些不同的实现是否等效 或者是否有更好的方法来实现 1 mod cpp export module mod export tem
  • QProcess未知错误

    我遇到了奇怪的问题 QProcess 只是不工作 并且错误未知 我在标头中有全局变量 QProcess importModule 我得到了这个功能 我尝试了start and startDetached顺便说一句方法 void App op
  • jQuery UI 在搜索之前自动完成显示结果

    我希望在我的项目中在关注自动完成输入之前显示一些初步结果 这些结果应该与自动完成 ajax 请求的结果相同 我可以通过自动完成的标准选项来做到这一点 还是应该编写相同的 JavaScript 代码 您应该设置minLength选项0 如果您
  • 如何使用javascript下载网页[重复]

    这个问题在这里已经有答案了 可能的重复 Javascript 可以读取任何网页的源代码吗 https stackoverflow com questions 680562 can javascript read the source of
  • 打印 C 字符串(UTF-8)时的 NSLog() 与 printf()

    我注意到 如果我尝试使用格式说明符 s 打印包含 UTF 8 字符串表示形式的字节数组 printf 说得对 但是NSLog 得到它乱码 即 每个字节按原样打印 因此例如 被打印为2个字符 这很奇怪 因为我一直认为NSLog 只是print
  • 如何根据条件 $push 字段?

    我试图在 MongoDB 聚合管道的 group 阶段有条件地将字段推入数组 本质上 我有包含用户名的文档以及他们执行的一系列操作 如果我将用户操作分组如下 group id name user name actions push acti