Ho una raccolta di elementi che possono essere convertiti in up o in down.Come gestire la divisione per zero nel framework di aggregazione MongoDB
{"_id" : 1, "name": "foo", "upvotes" : 30, "downvotes" : 10}
{"_id" : 2, "name": "bar", "upvotes" : 20, "downvotes" : 0}
{"_id" : 3, "name": "baz", "upvotes" : 0, "downvotes" : 0}
Mi piacerebbe usare l'aggregazione per calcolare la qualità
db.items.aggregate([
{"$project":
{
"name": "$name",
"upvotes": "$upvotes"
"downvotes": "$downvotes",
"quality": {"$divide":["$upvotes", "$downvotes"]}
}
},
{"$sort": {"quality":-1}}
]);
Ovviamente questo non funziona, a causa della divisione per zero. Ho bisogno di attuare appropriato condizionata:
se upvotes = 0 e downvotes == 0 allora la qualità = upvotes se upvotes e downvotes sono entrambi 0, allora la qualità è 0
Ho provato modificando downvotes da 1 utilizzando! idioma ternario. Ma inutilmente.
db.items.aggregate([
{"$project":
{
"name": "$name",
"upvotes": "$upvotes",
"downvotes": "$downvotes" ? "$downvotes": 1
}
},
{"$project":
{
"name": "$name",
"upvotes": "$upvotes"
"downvotes": "$downvotes",
"quality": {"$divide":["$upvotes", "$downvotes"]}
}
},
{"$sort": {"quality":-1}}
]);
Come è possibile integrare questo tipo di condizionamento all'interno del framework di aggregazione mongodb?
Questo è quanto, ho appena cambiato "N/A" a "$ upvotes ". Ad ogni modo, $ cond è il mio problema ora. – gwaramadze