簡體   English   中英

重命名填充返回值 Mongoose

[英]Rename populate returned values Mongoose

我正在嘗試返回返回的屬性,就像在MysqlAS 但具有重命名的對象屬性。

詢問

Games.find({leagueID:leagueID, result:{$ne: null}}).populate('home_id away_id').sort({date: -1}).execAsync()

輸出

{
    home_id: {
        ...some details
    },
    away_id: {
        ...some details
    }
}

期望輸出

{
    home: {
        ...some details
    },
    away: {
        ...some details
    }
}

那么我怎樣才能得到想要的結果呢?

您可以使用聚合並像這樣操作輸出字段

db.collection.aggregate([{ $project:{_id:0, home:"$home_id", away:"$away_id"} }])

我的解決方案是使用轉換功能。

GamesSchema.set('toJSON', {
    transform: function(doc, ret, options) {   
        if (mongoose.Types.ObjectId.isValid(ret.home)) {
            ret.homeId = ret.home;
            delete ret.home;
        }
        if (mongoose.Types.ObjectId.isValid(ret.away)) {
            ret.awayId = ret.away;
            delete ret.away;
        }
    }
});

沒有人口:

輸入

{
    "_id": "sD95OhsGrWVIqmTLVeuQdkna",
    "leagueID": 1000,
    "home": "404d1d9f68c3bb386b50f440" // ObjectId
    "away": "504d1d9f68c3bb386b50f450" // ObjectId
}

輸出

{
    "_id": "sD95OhsGrWVIqmTLVeuQdkna",
    "leagueID": 1000,
    "homeId": "404d1d9f68c3bb386b50f440"
    "awayId": "504d1d9f68c3bb386b50f450"
}

隨着人口:

輸入

{
    "_id": "sD95OhsGrWVIqmTLVeuQdkna",
    "leagueID": 1000,
    "home": "404d1d9f68c3bb386b50f440" // ObjectId
    "away": "504d1d9f68c3bb386b50f450" // ObjectId
}

輸出

{
    "_id": "sD95OhsGrWVIqmTLVeuQdkna",
    "leagueID": 1000,
    "home": {
        "_id": "404d1d9f68c3bb386b50f440",
        "name": "Home"
    }
    "away": {
        "_id": "504d1d9f68c3bb386b50f450",
        "name": "Away"
    }
}

試試 lodash 的 _.mapKeys,像這樣:

const newObject = _.mapKeys(oldObject.toJSON(), (value, key) => {
            if (key === 'oldKey') return 'newKey';
            return key;
          });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM