我正在尝试找到一种方法来对添加在一起的模型上的两个字段进行注释.就像是:
total_done = qs.values(
'ability__ability_name',
).extra(
select={
'total_amount': 'effective_value + overage',
}
).annotate(
total=Sum('total_amount'),
).values(
'ability__ability_name', 'total_amount'
).order_by('-total_amount')
Run Code Online (Sandbox Code Playgroud)
以上不起作用并产生错误"无法将关键字'total_amount'解析为字段"我已经尝试过此处指示的解决方案:对使用.extra(select = {...})引入的值使用.aggregate()一个Django查询? 然而,没有运气仍然得到"无法解析关键字'total_amount'到字段"
除了在原始sql中执行查询之外的任何其他内容都可以使用各种过滤器,并且已经对其进行了排除,使得该前景变得有点复杂.我也试图避免将字段添加到实际模型中并在保存期间计算它的值,除非这是唯一的方法.
好.请耐心等待,因为我需要提供大量的背景细节才能对我的问题征求合理的答案.
我有一个网站,允许您每日选股.它的工作方式是,提示您在当天面临关闭的公司之间进行选择.例如,GE与IBM.您可以选择两种类型:性能(哪种股票表现更好?)和总成交量(合并后的股票交易量是否高于或低于X?).你每天获得100美元的虚拟美元来进行选择.
最终,我们的目标是跟踪哪个用户在以下时间段内以不同类别(下文解释)的每次选择赚取最多钱:5天,15天,30天,90天,180天,1年,全部 - 时间.计算每次选择的金额非常简单.这是总赚钱(或丢失)/选秀数量.
现在,用户选择的每个公司都属于分类层次结构.通常,分类层次结构如下所示:
分部 - >主要集团 - >产业集团 - >分类 - >公司
这里有些例子:
mysql sql ruby-on-rails aggregation polymorphic-associations
我正在开展一个项目,该项目包含大量原始数据,其中聚合用于为面向公众的信息站点提供动力(一些简单的聚合,如各种总数和前十位总数,以及一些更多 - 复杂的聚合).目前,我们每隔几个月更新一次,包括添加新数据,可能更新或删除现有记录,以及重新运行所有离线聚合,然后将新聚合部署到生产中.
我们对增加更新频率感兴趣,因此从头开始重新聚合所有内容都不切实际,因此我们希望进行滚动聚合以更新现有聚合以反映新的,更改的或已删除的记录.
CouchDB的MapReduce实现提供了我正在寻找的大致设施:它将MapReduce任务的中间状态存储在一个大的B树中,其中地图的输出位于叶子处,并且reduce操作逐渐将分支连接在一起.新的,更新的或删除的记录会导致子树被标记为脏并重新计算,但只需要触摸reduce树的相关部分,并且可以按原样重复使用非脏子树的中间结果.
由于各种原因(虽然CouchDB的未来存在不确定性,缺乏对非MR一次性查询的便利支持,当前SQL大量实现等),我们不希望将CouchDB用于此项目,所以我我正在寻找这种树式增量map-reduce策略的其他实现(可能,但不一定,在Hadoop或类似的上面).
为了预先防止一些可能的反应:
使用Elasticsearch 1.1.1
我正在尝试为所有帐户的最后5分钟构建每秒"页面"视图的查询(因此匹配所有帐户).
映射是......
"xxx-20140526": {
"mappings": {
"xxx": {
"properties": {
"accountId": {
"type": "long"
},
"hitTime": {
"type": "date",
"format": "dateOptionalTime"
},
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
查询......
POST /xxx-20140526/xxx/_search
{
"filter": {
"range": {
"timeHit": {
"gte": "2014-05-26T13:40", //Date generated dynamically now - 5mins
"lt": "2014-05-26T13:45" //Date generated dynamically now
}
}
},
"aggs": {
"views_per_sec": {
"date_histogram": {
"field": "timeHit",
"interval": "second"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但聚合也会返回以前的值......
"aggregations": {
"trx_per_sec": {
"buckets": [
{
"key_as_string": "2014-05-26T13:36:46.000Z",
"key": …Run Code Online (Sandbox Code Playgroud) 我正在学习弹性搜索,并希望计算不同的值.到目前为止,我可以计算值,但不是很明显.
以下是示例数据:
curl http://localhost:9200/store/item/ -XPOST -d '{
"RestaurantId": 2,
"RestaurantName": "Restaurant Brian",
"DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'
curl http://localhost:9200/store/item/ -XPOST -d '{
"RestaurantId": 1,
"RestaurantName": "Restaurant Cecil",
"DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'
curl http://localhost:9200/store/item/ -XPOST -d '{
"RestaurantId": 1,
"RestaurantName": "Restaurant Cecil",
"DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么:
curl -XPOST "http://localhost:9200/store/item/_search" -d '{
"size": 0,
"aggs": {
"item": {
"terms": {
"field": "RestaurantName"
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
输出:
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3, …Run Code Online (Sandbox Code Playgroud) 我有这种结构的文档:
{
FIELD1:string,
FIELD2:
[ {SUBFIELD:number}, {SUBFIELD:number}...]
}
Run Code Online (Sandbox Code Playgroud)
我想对FIELD2.SUBFIELDs中数字总和的结果进行排序:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我获得的桶没有排序,但我希望桶按"a2"值排序.我怎么能这样做?谢谢!
假设我们有两个类,A并且B.当使用组合来建模"has-a"或"is-implemented-in-terms-of"关系(例如B has-a A)时,缺点与继承之一是B不包含A它需要的公共功能.为了获得对A公共函数的访问,有必要提供转发函数(与继承相反,B继承所有A的公共函数).
为了给出一个更具体的例子,假设我们有一个Person它具有-A ContactInfo:
using namespace std;
class ContactInfo
{
public:
ContactInfo();
void updateAddress(string address);
void updatePhone(string phone);
void updateEmail(string email);
private:
string address;
string phone;
string email;
};
class Person
{
public:
Person();
// Forwarding functions:
void updateAddress(string address){contactInfo.updateAddress(address)};
void updatePhone(string phone){contactInfo.updatePhone(phone)};
void updateEmail(string email){contactInfo.updateEmail(email)};
private:
ContactInfo contactInfo;
};
Run Code Online (Sandbox Code Playgroud)
在设计中忽略任何不足之处(这只是一个人为的例子来证明我下面的问题),我不得不不厌其烦地从复制确切函数签名ContactInfo中Person.在一个更复杂的例子中,可能有许多这样的函数,以及许多组合类的层,导致许多代码重复,具有所有常见的维护和容易出错的问题等. …
我在Stackoverflow上看到很多帖子解释了关系之间的区别:关联,聚合,组合和继承,以及示例.但是,我更加特别地混淆了每种方法的优缺点,并且当一种方法对于手头的任务最有效时.这是我无法真正找到一个好答案的东西.
与论坛的指导方针保持一致,我不是要问为什么人们可能会个人更喜欢使用继承而不是构图.我对每种方法中的任何客观利益/弱点都特别感兴趣,这听起来有点强烈.即,一种方法创建比另一种更可读的代码,或者它具有更好的运行时效率等.
理想情况下,如果有人可以给我一些真实世界的例子,这些方法可能已成功或失败,为什么,这对于发展我和我希望的其他知识非常有用.
为了确保一个可靠的基础,我已经在Python 2中包含了每个关系的例子.如果我对这些关系的理解实际上不正确,那么这应该可以避免混淆.
协会
B类与A类具有周关联关系,因为它在addAllNums方法中使用A中的特定属性.但是,这就是关系的程度.
class A(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def addNums():
self.b + self.c
class B(object):
def __init__(self, d, e):
self.d = d
self.e = e
def addAllNums(self, Ab, Ac):
x = self.d + self.e + Ab + Ac
return x
ting = A("yo", 2, 6)
ling = B(5, 9)
print ling.addAllNums(ting.b, ting.c)
Run Code Online (Sandbox Code Playgroud)
聚合
B类与A类形成聚合关系,因为它在初始化时引用独立的A对象作为其属性之一.虽然B对象依赖于A,但是在B被破坏的情况下,A将继续存在,因为它独立于B.
class A(object):
def __init__(self, a, b, c): …Run Code Online (Sandbox Code Playgroud) 我对弹性搜索世界很新.
假设我在两个字段上有一个嵌套聚合:field1和field2:
{
...
aggs: {
field1: {
terms: {
field: 'field1'
},
aggs: {
field2: {
terms: {
field: 'field2'
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码完美无缺,给我这样的东西:
aggregations: {
field1: {
buckets: [{
key: "foo",
doc_count: 123456,
field2: {
buckets: [{
key: "bar",
doc_count: 34323
},{
key: "baz",
doc_count: 10
},{
key: "foobar",
doc_count: 36785
},
...
]
},{
key: "fooOO",
doc_count: 423424,
field2: {
buckets: [{
key: "bar",
doc_count: 35
},{
key: "baz",
doc_count: …Run Code Online (Sandbox Code Playgroud) 我有一个用户模型,我想执行通用聚合。表示我传递给它执行的该函数的任何对象数组。
这是 getUser 函数的示例
public async getUser(aggregate: object): Promise<ResponseDTO> {
let response = {} as ResponseDTO;
const [err, user] = await To(User.aggregate(aggregate));
if (user) {
response = { success: true, data: user, message: "User fround" };
}
else
response = { success: false, message: "User not fround" };
return response;
}
Run Code Online (Sandbox Code Playgroud)
我将其作为参数传递
const query = [
{
$match: {
name:"Jon"
}
},
{
$project:{
_id:1
}
}
]
const userRes = await getUser(query);
Run Code Online (Sandbox Code Playgroud)
但我无法运行该程序,它在 getUser 函数上给我语法错误
*(方法)模型<任何,任何,任何> .aggregate(管道?:任何[] |未定义):聚合<任何[]>(+1重载)
“Aggregate<any[]>”类型的参数不可分配给“Promise”类型的参数。类型“Aggregate<any[]>”缺少类型“Promise”中的以下属性:[Symbol.toStringTag],最后* …
aggregation ×10
composition ×2
annotations ×1
associations ×1
c++ ×1
date-range ×1
django ×1
extra ×1
facet ×1
filtering ×1
hadoop ×1
inheritance ×1
mapreduce ×1
mongodb ×1
mysql ×1
node.js ×1
oop ×1
python ×1
sorting ×1
sql ×1
traits ×1
typescript ×1