- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 mongodb 集合中有一系列如下所示的命令:
id date value
A 1 Jan 18 1
A 2 Jan 18 0
A 3 Jan 18 0
B 14 Jan 18 4
B 15 Jan 18 5
B 16 Jan 18 0
使用 mongodb 聚合管道(mongo 3.4),我试图找出每个 id,它的值在什么日期从非零变为 0,以及这些记录的“id 组”。
第二次更新:19年5月26日
我更新了问题以更清楚地说明第一个和最后一个实现的样子:
{
"$addFields": {
"date": {
"$dateFromString": {
"dateString": "$date"
}
}
}
},
{
$group: {
_id: {
"id": "$id",
"value": "$value"
},
"first": {
"$first": "$date"
},
"last": {
"$last": "$date"
}
}
},
{
"$match": {
"_id.value": 0
}
}
https://mongoplayground.net/p/moBRI2Q7aGu
这给了我:
id value first last
A 0 2 Jan 18 3 Jan 18
B 0 16 Jan 18 16 Jan 18
如果我查看“第一个”日期,那些是值首先从非零变为 0 的日期。
但是,我希望看到在某个时间点从非零变为 0 的那些值的整个“id 组”。所以:
id value first last
A 1 1 Jan 18 1 Jan 18
A 0 2 Jan 18 3 Jan 18
B 4 14 Jan 18 14 Jan 18
B 5 15 Jan 18 15 Jan 18
B 0 16 Jan 18 16 Jan 18
为了得到这个,我需要在上述管道的比赛之前进入小组赛阶段,所以https://mongoplayground.net/p/YTP-NBJtO4R ,并使用第一个聚合管道的结果集以某种方式对其进行过滤。我在 pandas 中通过第一个结果集的左连接来执行此操作,但这似乎不够优雅。
所以现在我有两个不同的管道,这似乎有点不方便。理想情况下,最后一个结果集将来自单个聚合管道。
最佳答案
您可以使用以下聚合
db.collection.aggregate([
{ "$addFields": {
"date": { "$dateFromString": { "dateString": "$date" }}
}},
{ "$sort": { "date": 1 }},
{ "$match": { "value": 0 }},
{ "$group": {
"_id": "$id",
"date": { "$first": "$date" },
"value": { "$first": "$value" }
}}
])
更多的聚合技巧
db.collection.aggregate([
{ "$match": { "value": "0" }},
{ "$addFields": {
"date": { "$dateFromString": { "dateString": "$date" }}
}},
{ "$sort": { "date": 1 }},
{ "$group": {
"_id": "$id",
"data": {
"$push": {
"value": "$value",
"date": "$date"
}
}
}},
{ "$project": {
"data": {
"$arrayElemAt": [
{ "$filter": {
"input": "$data",
"cond": { "$eq": ["$$this.value", "0"] }
}},
0
]
}
}},
{ "$replaceRoot": {
"newRoot": { "$mergeObjects": [{ "id": "$_id" }, "$data"] }
}}
])
如果您的文档已经包含日期格式的日期而不是上面显示的方式,您可以删除第一阶段 $addFields
。
关于mongodb - 查找每个工具的值变化的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201148/
我的问题:非常具体。我正在尝试想出解析以下文本的最简单方法: ^^domain=domain_value^^version=version_value^^account_type=account_ty
好吧,这就是我的困境: 我正在为 Reddit 子版 block 开发常见问题解答机器人。我在 bool 逻辑方面遇到了麻烦,需要一双更有经验的眼睛(这是我在 Python 中的第一次冒险)。现在,该
它首先遍历所有 y 值,然后遍历所有 x 值。我需要 X 和 y 同时改变。 For x = 3 To lr + 1 For y = 2 To lr anyl.Cells(x, 1)
假设我有一个包含 2 列的 Excel 表格:单元格 A1 到 A10 中的日期和 B1 到 B10 中的值。 我想对五月日期的所有值求和。我有3种可能性: {=SUM((MONTH(A1:A10)=
如何转换 Z-score来自 Z-distribution (standard normal distribution, Gaussian distribution)到 p-value ?我还没有找到
我正在重写一些 Javascript 代码以在 Excel VBA 中工作。由于在这个网站上搜索,我已经设法翻译了几乎所有的 Javascript 代码!但是,有些代码我无法准确理解它在做什么。这是一
我遇到过包含日期格式的时间戳日期的情况。然后我想构建一个图表,显示“点击”项目的数量“每天”, //array declaration $array1 = array("Date" => 0); $a
我是scala的新手! 我的问题是,是否有包含成员的案例类 myItem:Option[String] 当我构造类时,我需要将字符串内容包装在: Option("some string") 要么 So
我正在用 PHP 创建一个登录系统。我需要用户使用他或她的用户名或电子邮件或电话号码登录然后使用密码。因为我知道在 Java 中我们会像 email==user^ username == user 这
我在 C++ 项目上使用 sqlite,但是当我在具有文本值的列上使用 WHERE 时出现问题 我创建了一个 sqlite 数据库: CREATE TABLE User( id INTEGER
当构造函数是显式时,它不用于隐式转换。在给定的代码片段中,构造函数被标记为 explicit。那为什么在 foo obj1(10.25); 情况下它可以工作,而在 foo obj2=10.25; 情况
我知道这是一个主观问题,所以如果需要关闭它,我深表歉意,但我觉得它经常出现,让我想知道是否普遍偏爱一种形式而不是另一种形式。 显然,最好的答案是“重构代码,这样你就不需要测试是否存在错误”,但有时没有
这两个 jQuery 选择器有什么区别? 以下是来自 w3schools.com 的定义: [attribute~=value] 选择器选择带有特定属性,其值包含特定字符串。 [attribute*=
为什么我们需要CSS [attribute|=value] Selector根本当 CSS3 [attribute*=value] Selector基本上完成相同的事情,浏览器兼容性几乎相似?是否存在
我正在解决 regx 问题。我已经有一个像这样的 regx [0-9]*([.][0-9]{2})。这是 amont 格式验证。现在,通过此验证,我想包括不应提供 0 金额。比如 10 是有效的,但
我正在研究计算机科学 A 考试的样题,但无法弄清楚为什么以下问题的正确答案是正确的。 考虑以下方法。 public static void mystery(List nums) { for (
好的,我正在编写一个 Perl 程序,它有一个我收集的值的哈希值(完全在一个完全独立的程序中)并提供给这个 Perl 脚本。这个散列是 (string,string) 的散列。 我想通过 3 种方式对
我有一个表数据如下,来自不同的表。仅当第三列具有值“债务”并且第一列(日期)具有最大值时,我才想从第四列中获取最大值。最终值基于 MAX(DATE) 而不是 MAX(PRICE)。所以用简单的语言来说
我有一个奇怪的情况,只有错误状态保存到数据库中。当“状态”应该为 true 时,我的查询仍然执行 false。 我有具有此功能的 Controller public function change_a
我有一个交易表(针对所需列进行了简化): id client_id value 1 1 200 2 2 150 3 1
我是一名优秀的程序员,十分优秀!