bugfix> javascript > 投稿

私はMongooseを使用してMongoDBを操作し、クライアントからサーバーへのAxiosでGET呼び出しを行っています。

だから...私はAxiosでこの電話をかけています

axios.get(route).then(res => {
            const races = res.data[0].InsideRaceResults
            console.log(races)
})
/* AND I LOG THIS
(17) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {_id: "5fe8c55830013624e4716eed", gpId: "Austrian Grand Prix", grandPrixDate: "Sunday, July 5", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)}
1: {_id: "5fe8c55830013624e4716f02", gpId: "Styrian Grand Prix", grandPrixDate: "Sunday, July 12", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)}
...
*/

したがって、その配列の最初の要素の内部に入力する場合は、明らかに[0]と入力し、2番目の要素の内部に入力する場合は、[1]を使用します。

私がやりたいのは、このマングースクエリに似たものです。

StandingsModel.updateOne({ "_id": "2020 Standings" },
        {
            '$set': { 'InsideRaceResults.$[race].RaceResult.$[result].driverName': 'Lewis Hamilton' },
        }, {
        "arrayFilters": [
            { "race._id": fatherid },
            { "result._id": childid }]
})

arrayFiltersを使用すると、ユーザーが入力した値と一致する配列内のオブジェクトを取得できます。

しかし、これを取得するためにJSで同様のことを行う方法はありますか...?

//This is what I tought that could be a good approach but obviusly it wasn't.
axios.get(route).then(res => {
            const races = res.data[0].InsideRaceResults[{gpId: "Styrian Grand Prix"}]
            console.log(races)
})
/* What I want to log
{_id: "5fe8c55830013624e4716f02", gpId: "Styrian Grand Prix", grandPrixDate: "Sunday, July 12", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)}
*/

ありがとう。

回答 1 件
  • 使用する Array.prototype.filter (そして Array.prototype.map ):

    const races    = res.data[0].InsideRaceResults;
    const filtered = races.filter( r => r.gpId === "Styrian Grand Prix" ); // Note that `filter` returns an array.
    if( filtered.length === 0 ) {
        // no results.
    } else if( filtered.length === 1 ) {
        // exactly 1 match.
    } else {
        // multiple matches.
    }
    
    

    3つの異なる結果を処理する方法を決定する必要があります filtered ケース。

あなたの答え