我需要将对象数组中的值相乘以获得输出的帮助。
这是我的JSON
$tags = array();
foreach ( get_tags() as $before_tag ) {
$tags[] = $before_tag->name;
}
if ( isset( $_REQUEST['tags'] ) && $_REQUEST['tags'] != '' && $_REQUEST['tags'] != null ) {
$filter_tags = explode( ',', $_REQUEST['tags'] );
} else {
$filter_tags = $tags;
}
$args =
array(
'tag' => $filter_tags,
);
$posts_by_tags = get_posts( $args );
$each_sixth = 1;
foreach ( $posts_by_tags as $post_by_tags ){
// do stuff
echo get_the_title( $post_by_tags->ID );
}
我需要做的是将值/* 1 */
{
"_id" : ObjectId("5b919a785cb288f7d5311846"),
"nome" : "Antonio",
"cod_produtor" : "PR001",
"morada" : {
"rua" : "Rua dos Carvalhos",
"n_porta" : 12.0,
"cod_postal" : "4567-123"
},
"data-registo" : ISODate("2017-07-22T03:41:20.201+0000"),
"colheita" : {
"cod_colheita" : "COL001",
"ano" : 2018.0,
"tipo_maça" : "Ambrosia",
"precario" : [
{
"valor" : "0-60",
"preço" : 0.1
},
{
"valor" : "60-65",
"preço" : 0.12
},
{
"valor" : "65-70",
"preço" : 0.15
},
{
"valor" : "70-75",
"preço" : 0.17
},
{
"valor" : "75-80",
"preço" : 0.2
},
{
"valor" : "80+",
"preço" : 0.23
},
{
"valor" : "85-90",
"preço" : 0.25
},
{
"valor" : "90+",
"preço" : 0.3
},
{
"valor" : "DEFEITO",
"preço" : 0.05
}
],
"Lote" : {
"Número Lote" : "FE9450H",
"Peso" : 4495.0,
"calibragem" : [
{
"valor" : "0-60",
"quantidade" : 22.0
},
{
"valor" : "60-65",
"quantidade" : 224.0
},
{
"valor" : "65-70",
"quantidade" : 624.0
},
{
"valor" : "70-75",
"quantidade" : 1183.0
},
{
"valor" : "75-80",
"quantidade" : 1424.0
},
{
"valor" : "80+",
"quantidade" : 911.0
},
{
"valor" : "85-90",
"quantidade" : 45.0
},
{
"valor" : "90+",
"quantidade" : 6.0
},
{
"valor" : "DEFEITO",
"quantidade" : 54.0
}
],
"TOTAL" : 4493.0,
"DIFERENÇA" : -2.0
}
}
}
/* 2 */
{
"_id" : ObjectId("5b91a8f65cb288f7d5311b50"),
"nome" : "João",
"cod_produtor" : "PR002",
"morada" : {
"rua" : "Rua dos Travessas",
"n_porta" : 169.0,
"cod_postal" : "9871-456"
},
"data-registo" : ISODate("2016-12-24T08:43:20.201+0000"),
"colheita" : {
"cod_colheita" : "COL005",
"ano" : 2018.0,
"tipo_maça" : "Golden",
"precario" : [
{
"valor" : "0-60",
"preço" : 0.1
},
{
"valor" : "60-65",
"preço" : 0.12
},
{
"valor" : "65-70",
"preço" : 0.15
},
{
"valor" : "70-75",
"preço" : 0.17
},
{
"valor" : "75-80",
"preço" : 0.2
},
{
"valor" : "80+",
"preço" : 0.23
},
{
"valor" : "85-90",
"preço" : 0.25
},
{
"valor" : "90+",
"preço" : 0.3
},
{
"valor" : "DEFEITO",
"preço" : 0.05
}
],
"Lote" : {
"Número Lote" : "FE1283961",
"Peso" : 1234.0,
"calibragem" : [
{
"valor" : "0-60",
"quantidade" : 22.0
},
{
"valor" : "60-65",
"quantidade" : 101.0
},
{
"valor" : "65-70",
"quantidade" : 223.0
},
{
"valor" : "70-75",
"quantidade" : 183.0
},
{
"valor" : "75-80",
"quantidade" : 424.0
},
{
"valor" : "80+",
"quantidade" : 11.0
},
{
"valor" : "85-90",
"quantidade" : 5.0
},
{
"valor" : "90+",
"quantidade" : 6.0
},
{
"valor" : "DEFEITO",
"quantidade" : 54.0
}
],
"TOTAL" : 1029.0,
"DIFERENÇA" : 205.0
}
}
}
/* 3 */
{
"_id" : ObjectId("5b91a9855cb288f7d5311b72"),
"nome" : "Antonio",
"cod_produtor" : "PR001",
"morada" : {
"rua" : "Rua dos Carvalhos",
"n_porta" : 12.0,
"cod_postal" : "4567-123"
},
"data-registo" : ISODate("2017-07-22T03:41:20.201+0000"),
"colheita" : {
"cod_colheita" : "COL001",
"ano" : 2017.0,
"tipo_maça" : "Ambrosia",
"precario" : [
{
"valor" : "0-60",
"preço" : 0.1
},
{
"valor" : "60-65",
"preço" : 0.12
},
{
"valor" : "65-70",
"preço" : 0.15
},
{
"valor" : "70-75",
"preço" : 0.17
},
{
"valor" : "75-80",
"preço" : 0.2
},
{
"valor" : "80+",
"preço" : 0.23
},
{
"valor" : "85-90",
"preço" : 0.25
},
{
"valor" : "90+",
"preço" : 0.3
},
{
"valor" : "DEFEITO",
"preço" : 0.05
}
],
"Lote" : {
"Número Lote" : "FE9450H",
"Peso" : 1000.0,
"calibragem" : [
{
"valor" : "0-60",
"quantidade" : 50.0
},
{
"valor" : "60-65",
"quantidade" : 150.0
},
{
"valor" : "65-70",
"quantidade" : 200.0
},
{
"valor" : "70-75",
"quantidade" : 250.0
},
{
"valor" : "75-80",
"quantidade" : 150.0
},
{
"valor" : "80+",
"quantidade" : 100.0
},
{
"valor" : "85-90",
"quantidade" : 45.0
},
{
"valor" : "90+",
"quantidade" : 15.0
},
{
"valor" : "DEFEITO",
"quantidade" : 40.0
}
],
"TOTAL" : 1000.0,
"DIFERENÇA" : 0.0
}
}
}
/* 4 */
{
"_id" : ObjectId("5b91ab8c5cb288f7d5311bed"),
"nome" : "Antonio",
"cod_produtor" : "PR001",
"morada" : {
"rua" : "Rua dos Carvalhos",
"n_porta" : 12.0,
"cod_postal" : "4567-123"
},
"data-registo" : ISODate("2017-07-22T03:41:20.201+0000"),
"colheita" : {
"cod_colheita" : "COL001",
"ano" : 2017.0,
"tipo_maça" : "Ambrosia",
"precario" : [
{
"valor" : "0-60",
"preço" : 0.1
},
{
"valor" : "60-65",
"preço" : 0.12
},
{
"valor" : "65-70",
"preço" : 0.15
},
{
"valor" : "70-75",
"preço" : 0.17
},
{
"valor" : "75-80",
"preço" : 0.2
},
{
"valor" : "80+",
"preço" : 0.23
},
{
"valor" : "85-90",
"preço" : 0.25
},
{
"valor" : "90+",
"preço" : 0.3
},
{
"valor" : "DEFEITO",
"preço" : 0.05
}
],
"Lote" : {
"Número Lote" : "FE9450H",
"calibragem" : [
{
"valor" : "0-60",
"quantidade" : 50.0
},
{
"valor" : "60-65",
"quantidade" : 150.0
},
{
"valor" : "65-70",
"quantidade" : 200.0
},
{
"valor" : "70-75",
"quantidade" : 250.0
},
{
"valor" : "75-80",
"quantidade" : 150.0
},
{
"valor" : "80+",
"quantidade" : 100.0
},
{
"valor" : "85-90",
"quantidade" : 45.0
},
{
"valor" : "90+",
"quantidade" : 15.0
},
{
"valor" : "DEFEITO",
"quantidade" : 40.0
}
],
"TOTAL" : 1000.0,
"DIFERENÇA" : 0.0
}
}
}
与colheita.precario
相乘得到它们的总和。在colheita.Lote.calibragem
中,您拥有colheita.precario
和valor
;在preço
中,您拥有colheita.Lote.calibragem
和valor
。字段quantidade
必须匹配,然后乘以valor
* preço
实际上,我有两种不同的方法。但是他们都不在工作。 我在想这样的事情:
使用STUDIO 3T
第一阶段-匹配
在这里我需要匹配不同的东西
quantidade
第2阶段-项目
{
"cod_produtor" : "PR001",
"colheita.ano" : 2017
}
但是这不起作用,因为它给出了一个错误:
“
{ // specifications _id : "$colheita.Lote.Número Lote", total: { $sum:[ { "$multiply": [ "$colheita.precario.0.preço", "$colheita.Lote.0.quantidade" ] }, { "$multiply" : [ "$colheita.precario.1.preço", "$colheita.Lote.1.quantidade" ] } ] } }
累加器是一元运算符”
非常感谢您的帮助
答案 0 :(得分:1)
您可以在3.4聚合中使用以下项目。
$range
遍历$map
内的colheita.precario
,并输出包含数组字段的值,这些数组字段包含preco和quanidade的乘积。
$let
带有索引(来自{{11}}(ix)的表达式),以输出colheita.precario和Lote.calibragem元素。
$range
答案 1 :(得分:1)
您可以使用以下汇总
db.state.aggregate(
// Pipeline
[
// Stage 1
{
$unwind: {
path : "$colheita.precario",
includeArrayIndex : "arrayIndex", // optional
preserveNullAndEmptyArrays : false // optional
}
},
// Stage 2
{
$unwind: {
path : "$colheita.Lote.calibragem",
includeArrayIndex : "arrayIndex", // optional
preserveNullAndEmptyArrays : false // optional
}
},
// Stage 3
{
$project: {
"total": {
"$cond": {
"if": { "$eq": [ "$colheita.precario.valor", "$colheita.Lote.calibragem.valor" ] },
"then": { $multiply: [ "$colheita.precario.preço", "$colheita.Lote.calibragem.quantidade" ] },
"else": 0
}
}
}
},
// Stage 4
{
$group: {
"_id":"$_id",
totalAmount: { $sum: "$total" }
}
},
]);