Mongo 3.4-Version
$map, um den Preis und Wert des Artikels zu multiplizieren, und $reduce, um die Summe aus Preis und Wert des Artikels zu berechnen, und $reduce, um die Summe der Kosten zu berechnen. $subtrahieren Sie Werte von früheren Reduzierungen, um den endgültigen Betrag zu erhalten.
aggregate([{
$project: {
_id: 1,
amount: {
$subtract: [{
$reduce: {
input: {
$map: {
input: "$items",
as: "item",
in: {
$multiply: ["$$item.value", "$$item.price"]
}
}
},
initialValue: 0,
in: {
$add: ["$$value", "$$this"]
}
}
}, {
$reduce: {
input: "$costs.price",
initialValue: 0,
in: {
$add: ["$$value", "$$this"]
}
}
}]
}
}
}])
Mongo 3.x-Version
Erstes $Projekt, um den Wert und Preis des Artikels zu multiplizieren. Nächste Gruppierung zur Berechnung der Summe für Artikel- und Kostenfelder, was zu einem Array-Wert für jedes Artikel- und Kostenfeld führt, und das letzte Projekt betrachtet nur den Array-Wert aus beiden Arrays mit $arrayElemAt, um die Werte voneinander zu subtrahieren. P>
aggregate(
[{
$project: {
vpItems: {
$map: {
input: "$items",
as: "item",
in: {
$multiply: ["$$item.value", "$$item.price"]
}
}
},
costs: '$costs'
}
}, {
$group: {
_id: '$_id',
vpItems: {
$addToSet: {
$sum: '$vpItems'
}
},
pCosts: {
$addToSet: {
$sum: '$costs.price'
}
}
}
}, {
$project: {
_id: 1,
amount: {
$subtract: [{
$arrayElemAt: ["$vpItems", 0]
}, {
$arrayElemAt: ["$pCosts", 0]
}]
}
}
}])
Mongo 2.6-Version
$Entfernen Sie Artikel und gruppieren Sie, um die Summe der zurückgegebenen Werte zu berechnen, indem Sie den Preis und Wert des Artikels multiplizieren, und $Entwickeln Sie die Kosten, um die Summe des Artikelpreises und -werts zu berechnen, und planen Sie, $Werte von der vorherigen Gruppierung zu subtrahieren, um den Endbetrag zu berechnen.
aggregate([{
$unwind: '$items'
}, {
$group: {
_id: '$_id',
totalItems: {
$sum: {
$multiply: ["$items.value", "$items.price"]
}
},
costs: {
$first: '$costs'
}
}
}, {
$unwind: '$costs'
}, {
$group: {
_id: '$_id',
totalItems: {
$first: '$totalItems'
},
totalPrice: {
$sum: '$costs.price'
}
}
}, {
$project: {
_id: 1,
amount: {
$subtract: ['$totalItems', '$totalPrice']
}
}
}])