sql >> Database >  >> NoSQL >> MongoDB

Mongodb sorteert documenten op complexe berekende waarde

Uw $temp_score en $temp_votes bestaan ​​nog niet in uw $divide .

Je kunt nog een $project . doen :

db.user.aggregate([{
    "$project": {
        'temp_score': {
            "$add": ["$total_score", 100],
        },
        'temp_votes': {
            "$add": ["$total_votes", 20],
        }
    }
}, {
    "$project": {
        'temp_score':1,
        'temp_votes':1,
        'weight': {
            "$divide": ["$temp_score", "$temp_votes"]
        }
    }
}])

of opnieuw berekenen van temp_score en temp_votes in $divide :

db.user.aggregate([{
    "$project": {
        'temp_score': {
            "$add": ["$total_score", 100],
        },
        'temp_votes': {
            "$add": ["$total_votes", 20],
        },
        'weight': {
            "$divide": [
                { "$add": ["$total_score", 100] },
                { "$add": ["$total_votes", 20] }
            ]
        }
    }
}]);

Je kunt dit ook doen in één enkel $project met behulp van de $let operator die zal worden gebruikt om 2 variabelen te creëren temp_score en temp_votes . Maar de resultaten zijn toegankelijk onder een enkel veld (hier total ) :

db.user.aggregate([{
    $project: {
        total: {
            $let: {
                vars: {
                    temp_score: { $add: ["$total_score", 100] },
                    temp_votes: { $add: ["$total_votes", 20] }
                },
                in : {
                    temp_score: "$$temp_score",
                    temp_votes: "$$temp_votes",
                    weight: { $divide: ["$$temp_score", "$$temp_votes"] }
                }
            }
        }
    }
}])



  1. Hoe kan ik een unieke id met twee kolommen toevoegen aan de mongodb in een meteor-app?

  2. MongoDB GeoSpatial Index gebruiken in C++

  3. Fout:sluit ETIMEDOUT aan tijdens het schrapen

  4. Hoe te verwijzen naar een ingesloten document in Mongoid?