Quindi ho bisogno di un campo personalizzato calcolato in MongoDB come segue
if(field1 =="A") ->customfield=10
else if(field1 =="B" )->customfield=20
else (field1 =="C") ->customfield=15
sto usando aggregazione insieme con l'istruzione $ progetto. Ma l'operatore $ cond non consente elseif (sottraendo il resto) e consente semplicemente due rami statici in caso contrario. Utilizzando un elseif nidificato provoca
"exception: field inclusion is not allowed inside of $expressions"
Heres la mia domanda (che mi dà l'errore)
db.items.aggregate([ { $project :
{
name: 1,
customfield:
{
$cond: { if: { $eq: [ "$field1", "4" ] }, then: 30,
else: {
if:
{ $eq: ["$field1","8"]},
then: 25, else: 10}}
}
}},{ $sort: { customfield: 1 }},{$limit:12}]);
Esiste un metodo o soluzione a questo. Le mie scuse se questa è una domanda ripetuta, ma non sono riuscito a trovarne una simile.
hai "$ field1" e poi "campo1". Errore di battitura? –
Grazie, ma questo è stato il risultato della mia fretta (nel battere a macchina). Modificato lo stesso per riflettere la query originale, scuse per la confusione. – humblerookie
Non sono sicuro al 100%, ma non penso ci sia alcuna sintassi che possa accorciare la tua query. Dovrai nidificare il 'if' all'interno di' else'. – ujvl