我正在开发一个使用 递归查找评论线程的功能$graphLookUp,我几乎已经拥有它了。(虽然方式有点复杂,但它正在起作用!)
我需要的最后一步如下:
不要将嵌套posteriorThread作为根数组()的属性$$ROOT,而是将其合并到根本身。
const posteriorThread = await Comment.aggregate([
{
$match: {
_id: post.threadDescendant
}
},
{
$graphLookup: {
from: 'baseposts',
startWith: '$threadDescendant',
connectFromField: 'threadDescendant',
connectToField: '_id',
as: 'posteriorThread'
}
},
{
$unwind: '$posteriorThread'
},
{
$sort: { 'posteriorThread.depth': 1 }
},
{
$group: {
_id: '$_id',
posteriorThread: { $push: '$posteriorThread' },
root: { $first: '$$ROOT' }
}
},
{
$project: {
'root.posteriorThread': 0
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [ …Run Code Online (Sandbox Code Playgroud) 我有一个 pandas groupby 功能。我有另一个 dict 形式的输入,其具有 {column:aggfunc} 结构,如下所示:
d = {'production': 'sum',
'Demand': 'first'}
Run Code Online (Sandbox Code Playgroud)
我想使用这个字典来应用aggregate函数,如下所示:
df.groupby(['Month']).agg(production=pd.NamedAgg('production', aggfunc='sum'),
demand=pd.NamedAgg('Demand', aggfunc='first'))
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使用输入字典来实现此目的d(可能通过使用字典理解)?
我有这两个简单的集合:
项目:
{
"id" : "111",
"name" : "apple",
"status" : "active"
}
{
"id" : "222",
"name" : "banana",
"status" : "active"
}
Run Code Online (Sandbox Code Playgroud)
存货:
{
"item_id" : "111",
"qty" : 3,
"branch" : "main"
}
{
"item_id" : "222",
"qty" : 3
}
Run Code Online (Sandbox Code Playgroud)
现在我只想返回库存集合中存在且等于“main”且具有“status”==“active”和“branch”的项目。我有下面的代码,但它返回所有文档,第二个文档有一个空的“info”数组。
db.getCollection('items')
.aggregate([
{$match:{$and:[
{"status":'active'},
{"name":{$exists:true}}
]
}},
{$lookup:{
as:"info",
from:"inventory",
let:{fruitId:"$id"},
pipeline:[
{$match:{
$and:[
{$expr:{$eq:["$item_id","$$fruitId"]}},
{"branch":{$eq:"main"}},
{"branch":{$exists:true}}
]
}
}
]
}}
])
Run Code Online (Sandbox Code Playgroud)
谁能给我一个关于如何解决这个问题的想法?
在组聚合中,如果年龄为 20,我只是尝试将名称添加到集合中:
假设我有以下两个文档:
_id: ...
timestamp: ...
name: Max
age: 20
_id: ...
timestamp: ...
name: Brian
age: 21
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试将这些进行分组,并$group尝试将所有 20 岁的人的名字添加到一个集合中:
{
$group: {
_id: {
bins: {
$dateTrunc: {
date: '$timestamp',
unit: 'week',
binSize: 1
}
}
},
'NamesWithAge20': {
$addToSet: '$name'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只对“NamesWithAge20”集感兴趣。在这段代码中,现在 Max 和 Brian 都被添加到集合中,但我想引入一个条件,仅在年龄为 20 岁时添加名字。在这个阶段可以吗?
这是我的数据:
df1 <- fread('
id , date1 , date2
id_0001 , 2017-01-01, 2017-01-05
id_0002 , 2017-01-02, 2017-01-08
id_0003 , 2017-01-04, 2017-01-07
')
df2<- fread('
date , value
2017-01-01, 1
2017-01-02, 2
2017-01-03, 5
2017-01-04, 5
2017-01-05, 5
2017-01-06, 3
2017-01-07, 4
2017-01-08, 7
2017-01-09, 5
2017-01-10, 1
2017-01-11, 5
')
Run Code Online (Sandbox Code Playgroud)
我想总结(获取平均值)每个from在 rowwise和之间的范围内的valuefrom 。df2iddf1date1date2
结果是这样的:
| ID | 日期1 | 日期2 | 价值 |
|---|---|---|---|
| id_0001 | 2017-01-01 | 2017-01-05 | mean(c(1,2,5,5,5)) |
| id_0002 | 2017-01-02 | 2017-01-08 | mean(c(2,5,5,5,3,4,7)) |
| id_0003 | 2017-01-04 | 2017-01-07 | mean(c(5,5,3,4)) |
我知道我可以扩展idby …
代码
list(c(1,2), c('a', 'b'), c('a', 'b'), c(2,3)) -> li
##
## [[1]]
## [1] 1 2
##
## [[2]]
## [1] "a" "b"
##
## [[3]]
## [1] "a" "b"
##
## [[4]]
## [1] 2 3
Run Code Online (Sandbox Code Playgroud)
问:所需的输出来自 table()。
Factor c(1,2) c('a', 'b') c(2,3)
Freq 1 2 1
Run Code Online (Sandbox Code Playgroud)
它看起来很简单,但我找不到解决方案。
编辑- 不幸的是,我的列表包含大约 500,000 个元素。抱歉没有提到这一点。解决方案可能是将列表中的项目合并为单个元素:
##
## [[1]]
## [1] "1 2"
##
## [[2]]
## [1] "a b"
##
## [[3]]
## [1] "a b"
##
## [[4]]
## [1] …Run Code Online (Sandbox Code Playgroud) 我想在列表中获取where子句的结果,然后获取该结果集并创建一个新类型,其所有字段都是从原始查询的聚合构造的.所以给定下面的基本示例,无论如何将两个linq语句合并为一个?如果原始的地方没有行,那么它应该返回null.谢谢!
class Foo
{
public int A { get; set; }
public int B { get; set; }
}
List<Foo> lst = GetFooList();
var q = (from f in lst
where f.A > 3
select f).ToList();
if (q.Count != 0)
{
var qq = new
{
MinA = q.Min(l => l.A),
MaxB = q.Max(h => h.B),
};
// now do something with qq
}
Run Code Online (Sandbox Code Playgroud)
更新:对于我的情况,原始集合有很多项目,但在where子句之后,结果集非常小.多次枚举第二组应该不是问题.此外,我需要在集合上使用first和last来从这些记录中获取值.答案小组最适合我.聚合方式非常有趣,我认为还有其他用途.
我有一张桌子,里面有我想要的4件事......名称,价格,数量,以及具体的日期
每个日期有很多条目:
Name Price Date
Twin Private $25 06/02/09
Double $35 06/02/09
Single $20 06/02/09
Twin Private $25 06/03/09
Double $35 06/03/09
Single $20 06/03/09
Twin Private $25 06/04/09
Double $35 06/04/09
Single $20 06/04/09
Run Code Online (Sandbox Code Playgroud)
我怎样才能将它压缩成:
Name Price_06/02/09 Price_06/03/09 Price_06/04/09
Twin Private $25 $25 $30
Double $35 $35 $50
Single $20 $20 $40
Run Code Online (Sandbox Code Playgroud) 我无法使用此处的搜索功能或Google上的问题找到问题的答案.
我有一个数据框(500列宽,200,000行长),每人多行.每个单元格(除了具有人员ID的第一列)包含0或1.我正在寻找一种方法将每个人的数据帧减少到1行,其中我按人数取每列的最大值.
我知道我可以使用ddply或data.table ......如下所示......
tt <-data.frame(person=c(1,1,1,2,2,2,3,3,3), col1=c(0,0,1,1,1,0,0,0,0),col2=c(1, 1, 0, 0, 0, 0, 1 ,0 ,1))
library(plyr)
ddply(tt, .(person), summarize, col1=max(col1), col2=max(col2))
person col1 col2
1 1 1
2 1 0
3 0 1
Run Code Online (Sandbox Code Playgroud)
但我不想指定我的每个列名,因为1)我有500和2)在新数据集上它们可能不同.
所以我有一个像这样的结构表
id V1 V2
101, 500, 1
101, 600, 1
102, 300, 0
102, 300, 0
102, 400, 0
102, 100, 1
103, 200, 0
103, 400, 0
104, 200, 1
Run Code Online (Sandbox Code Playgroud)
基本上对于每个id,我想计算V1的平均值和V2的总和,所以新表应该是这样的
id V1 V2
101, 550, 2
102, 275, 1
103, 400, 0
104, 200, 1
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮忙,我真的很感激.