sql >> データベース >  >> NoSQL >> MongoDB

Mongodbは、複雑な計算値でドキュメントを並べ替えます

    $temp_score および$temp_votes $divideにはまだ存在していません 。

    別の$projectを実行できます :

    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"]
            }
        }
    }])
    

    またはtemp_scoreを再計算します およびtemp_votes $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] }
                ]
            }
        }
    }]);
    

    これは、1つの$projectで行うこともできます $letを使用する オペレーター これは、2つの変数temp_scoreを作成するために使用されます およびtemp_votes 。ただし、結果には1つのフィールド(ここでは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. ClusterControlを使用した複数のデータベーステクノロジーの管理

    2. ゼロ以外のミリ秒のすべてのドキュメントを検索するためのクエリ

    3. エラー:子プロセスが失敗し、エラー番号48で終了しました

    4. Mongoidを使用する代わりにRubyから直接MongoDBをクエリする方法は?