ich benutzt hatte, die Funktion in meiner lokalen gehosteten Entwicklung zu reduzieren, aber jetzt habe ich den Code zu einem Live-Server bereitgestellt habe und im jetzt einen Fehler bekommen:
MongoError: exception: invalid operator '$reduce'
Im es mit tägliche Ernährungstagebücher zu bekommen, um Kalorien zu berechnen verbraucht:
user_food.aggregate({$match:{user_id:mongoose.Types.ObjectId(req.session.user_id)}},{$project: {date:1,calories:{$add:[
{$reduce: {input: "$breakfast",initialValue: 0,in: { $add : ["$$value", "$$this.calories"]}}},
{$reduce: {input: "$lunch",initialValue: 0,in: { $add : ["$$value", "$$this.calories"]}}},
{$reduce: {input: "$snacks",initialValue: 0,in: { $add : ["$$value", "$$this.calories"]}}},
{$reduce: {input: "$dinner",initialValue: 0,in: { $add : ["$$value", "$$this.calories"]}}}]}}}, function (err, results) {
//if there is an error
if (err) {
console.log("something went wrong: " + err);
return res.status(500).send(err);
} else {
return res.status(200).send(results);
}
});
Das Dokument für den Benutzer Essen ist ziemlich einfach:
{
"_id": ObjectId("58d26c3dd60bd36f40fa0498"),
"user_id": ObjectId("587cd30bd338b90a6c18e58f"),
"calories": 2000,
"date": 20170222,
"snacks": [
{
"nutrients": {
"protein": 7.5,
"carbs": 56.5,
"fat": 10.5
},
"servings": 23.8,
"calories": 526,
"name": "Dairy milk"
}
],
"dinner": [ ],
"lunch": [
{
"nutrients": {
"protein": 9.5,
"carbs": 25.4,
"fat": 17.2
},
"servings": 60,
"calories": 751,
"name": "2 pork sausages rolls"
}
],
"breakfast": [
{
"nutrients": {
"protein": "4.8",
"carbs": "65",
"fat": "26"
},
"servings": 20.5,
"calories": 438,
"name": "Oreo"
}
],
"__v": 0
}
Wenn mir jemand in die richtige Richtung zeigen kann, um diese ID zu beheben, sei sehr dankbar.
$ reduzieren, ist neu in Version 3.4. Können Sie Ihre db-Version überprüfen, indem Sie db.version() in Ihrer mongo-Shell ausführen? –
@Blastfreak seine Version 2.6.12, gibt es eine Möglichkeit, dies zu beheben, um auf der älteren Version zu arbeiten? –
Grundsätzlich ist es in 3.4 eingeführt, so ist die beste und stabilste Problemumgehung zu aktualisieren. –