我们正在将现有系统转换为 DDD,并且正在努力理解一些概念。
我们有一个名为 的聚合根,它具有和 等Animal属性。目前数据库有两个表,分别称为和,它们存储状态更改时有关动物的信息。这些表有时会删除记录,并且在从.StatusSourceStatusHistorySourceHistoryAnimalAnimalRepository
所以最大的问题是它们属于哪里?以下是我们的一些想法:
将它们作为不同的实体对象作为动物聚合的一部分。并具有允许更新它们的相应方法,例如:Animal.UpdateStatus(newStatus),这将使用对象添加到集合中new StatusHistory(this)。但如上所述,当为存储库获取现有动物时,很少需要这些,因此我们不希望存储库加载它们。我们目前没有使用 ORM,而是使用存储库内的表数据网关手动映射。
使每个历史实体成为聚合根。我们不喜欢这种做法,因为感觉我们并没有真正对领域进行建模,而只是朝着Active Record Pattern. 此外,为动物更新这些的任务必须位于动物实体之外。
我们可以尝试将这些历史组合成另一个聚合根,称为AnimalHistory其全部目的是维持动物的历史。但这又会改变将历史存储到动物以外的其他事物中的逻辑。可能是像这样的服务AnimalProcessingService,感觉我们可能正在走向贫血的设计。
我希望有另一种选择可以为我们提供更简洁的设计。
基础数据:
DEPTNO ENAME
------ ------
20 SMITH
30 ALLEN
30 WARD
20 JONES
30 MARTIN
30 BLAKE
10 CLARK
20 SCOTT
10 KING
30 TURNER
20 ADAMS
30 JAMES
20 FORD
10 MILLER
Run Code Online (Sandbox Code Playgroud)
期望的输出:
DEPTNO EMPLOYEES
------ ---------
10 CLARK,KING,MILLER
20 SMITH,FORD,ADAMS,SCOTT,JONES
30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
Run Code Online (Sandbox Code Playgroud)
我尝试过这个 jpql 查询:
SELECT deptno, new list(ename) as employees
FROM dept_emp
Run Code Online (Sandbox Code Playgroud)
然而,出现了一个例外:
org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:第 1 行第 15 列附近的新内容
JPA 2.1
休眠 4.3.1
另请参阅: /sf/answers/1719943221/
我的项目当前已设置,以便 MyApp 目标包含一些运行脚本构建阶段。这些脚本取决于构建阶段的顺序。例如,有一个脚本在复制捆绑资源之前运行,另一个脚本在复制捆绑资源之后运行。
我的测试目标取决于 MyApp,因此当我运行测试(产品菜单、测试)时,我不想包含其中一些脚本,因为它会减慢测试速度。
我想创建一个包含 MyApp 目标的聚合目标。然后将测试时我不想运行的脚本从 MyApp 移出并移入聚合。但是,我不知道如何配置这些脚本运行时的相同顺序。
有没有办法做到这一点?或者也许是一个更好的解决方案?
假设我有一个数据框
Category Data1 column1
A 'SOMEDATA' 10
A 'SOMEDATA' 2
A 'SOMEDATA' -10
B 'SOMEDATA' 10
B 'SOMEDATA' 1
B 'SOMEDATA' -10
Run Code Online (Sandbox Code Playgroud)
等等
我想按列值在每个组中选择一行。例如,ABS(column1)
所以结果数据是
Category Data1 column1
A 'SOMEDATA' 2
B 'SOMEDATA' 1
Run Code Online (Sandbox Code Playgroud)
我怎么能在python中做到这一点?
我不知道如何返回整行。例如,
df.groupby('Category')['column1'].min();
Run Code Online (Sandbox Code Playgroud)
这只会返回 'Category' min(column1) 。
正如主题所描述的,我有一个 PySpark 数据框,我需要将三列融合成行。每列基本上代表一个类别中的一个事实。最终目标是将数据聚合到每个类别的单个总数中。
这个数据帧中有数千万行,所以我需要一种方法来在 Spark 集群上进行转换而不将任何数据带回驱动程序(在这种情况下为 Jupyter)。
这是我的几个商店的数据框的摘录:
+-----------+----------------+-----------------+----------------+
| store_id |qty_on_hand_milk|qty_on_hand_bread|qty_on_hand_eggs|
+-----------+----------------+-----------------+----------------+
| 100| 30| 105| 35|
| 200| 55| 85| 65|
| 300| 20| 125| 90|
+-----------+----------------+-----------------+----------------+
这是所需的结果数据帧,每个商店多行,其中原始数据帧的列已融合到新数据帧的行中,每个原始列在新类别列中占一行:
+-----------+--------+-----------+
| product_id|CATEGORY|qty_on_hand|
+-----------+--------+-----------+
| 100| milk| 30|
| 100| bread| 105|
| 100| eggs| 35|
| 200| milk| 55|
| 200| bread| 85|
| 200| eggs| 65|
| 300| milk| 20|
| 300| bread| 125|
| 300| eggs| 90|
+-----------+--------+-----------+
最终,我想聚合结果数据框以获得每个类别的总数:
+--------+-----------------+
|CATEGORY|total_qty_on_hand|
+--------+-----------------+
| milk| 105|
| bread| …
我在 MongoDB 数据库中捕获了一些事件数据,其中一些事件成对发生。
例如:DOOR_OPEN 和 DOOR_CLOSE 是两个成对发生的事件
事件集合:
{ _id: 1, name: "DOOR_OPEN", userID: "user1", timestamp: t }
{ _id: 2, name: "DOOR_OPEN", userID: "user2", timestamp: t+5 }
{ _id: 3, name: "DOOR_CLOSE", userID: "user1", timestamp:t+10 }
{ _id: 4, name: "DOOR_OPEN", userID: "user1", timestamp:t+30 }
{ _id: 5, name: "SOME_OTHER_EVENT", userID: "user3", timestamp:t+35 }
{ _id: 6, name: "DOOR_CLOSE", userID: "user2", timestamp:t+40 }
...
Run Code Online (Sandbox Code Playgroud)
假设记录按时间戳排序, _id: 1 和 _id: 3 是“user1”的“配对”。_id: 2 和 _id: 6 是“user2”。
我想为每个用户获取所有这些 DOOR_OPEN 和 …
import pandas as pd
data1 = [
{'File': '7396ee8aea09.json', 'Last': '2019-04-25 20:24:28+00:00', 'Size': 78796, 'COLA': 'STANDARD'},
{'File': '7777682e4/ip/done', 'Last': '2019-04-24 21:45:01+00:00', 'Size': 4, 'COLA': 'CUSTOM'},
{'File': 'erparameters.json', 'Last': '2019-04-24 21:45:01+00:00', 'Size': 351, 'COLA': 'STANDARD'}
]
data2 = [
{'File': '3343e4/ip/ip.json', 'Last': '2019-04-24 21:45:01+00:00', 'Size': 20, 'COLA': 'STANDARD'},
{'File': 'ta-00000-of-00001', 'Last': '2019-04-24 22:43:17+00:00', 'Size': 140216236, 'COLA': 'STANDARD'},
{'File': '-20514.ckpt.index', 'Last': '2019-04-24 22:43:17+00:00', 'Size': 3168, 'COLA': 'STANDARD'},
]
# right now 2 for the prova but could be much more..
datas = …Run Code Online (Sandbox Code Playgroud) 我有以下 data.frame:
x <- data.frame(A = c("Y", "Y", "Z", NA),
B = c(NA, TRUE, FALSE, TRUE),
C = c(TRUE, TRUE, NA, FALSE))
Run Code Online (Sandbox Code Playgroud)
我需要计算下表xtabs:
A B C
Y 1 2
Z 0 0
<NA> 1 0
Run Code Online (Sandbox Code Playgroud)
我被告知要使用na.action = NULL,它确实返回了我需要的表:
xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE,
na.action = NULL)
A B C
Y 1 2
Z 0 0
<NA> 1 0
Run Code Online (Sandbox Code Playgroud)
但是,na.action = na.pass返回一个不同的表:
xtabs(formula = cbind(B, C) ~ A, …Run Code Online (Sandbox Code Playgroud) 我有 2 个集合假设为 1 对多关系,例如用户和评论。要求是将用户与其最新评论合并为单个对象,并返回新合并对象的列表作为结果。
聚合在 mongo 控制台中完美运行
db.user.aggregate(
{
$addFields:{
cId: {$toString: '$_id'},
user: '$$ROOT'
}
},
{$match: {'invitees': {$elemMatch: {'user.userId': '5e70e82532044a5e4e7cbc8d'}}}},
{$lookup: {
from: 'comment',
let: {'cc': '$cId'},
pipeline: [
{$match: {$expr: {$and: [{$eq: ['$$cc', '$userId']},{$gte: ['$time', '$$NOW']}]}}},
{$sort: {'time': -1}},
{$limit: 1}
],
as: 'next'
}
},
{$unwind: {path: '$next'}},
{
$project: {
_id: 0,
user: 1,
next: 1,
status: {
$map: {
input: {
$filter: {
input: '$invitees',
as: 'item',
cond: {
$eq: ['$$item.user.userId', '$userId']
} …Run Code Online (Sandbox Code Playgroud) 我有一个与此类似的表,在 (A, B) 上有一个多索引
>>> columns = ["A", "B", "C", "D"]
... data = [
... [1, 1, 99, 22],
... [1, 2, 87, 24],
... [1, 3, 65, 31],
... [2, 1, 88, 30],
... [2, 2, 76, 33],
... [2, 3, 23, 32],
... [2, 4, 38, 28],
... [3, 1, 33, 40],
... [3, 2, 23, 41],
...]
>>>
>>> pd_table = pd.DataFrame(data=data, columns=columns)
>>> pd_table.set_index(["A", "B"], inplace=True)
>>> print(pd_table)
C D
A B
1 1 99 …Run Code Online (Sandbox Code Playgroud)