簡體   English   中英

在 mongoose 查詢中排除所有嵌套文檔中的特定字段

[英]Exclude specific fields in all nested document in mongoose query

我有一個以trips作為字段的ride Collection, trips是一個map,其中鍵是不同的年份 我想查詢集合,但在每次旅行中排除乘客字段

const ride = new Schema(
    {
        boat_operator: {
            type: Schema.Types.ObjectId,
            required: true,
            ref: 'User'
        },
        trips: {
            type: Map,
            of: {
                passengers: [{ type: Schema.Types.ObjectId, ref: 'User' }],
                available_seats: { type: Number, required: true }
            },
            default: new Map()
        }  
    }
    )

我試過這個

const rides = await Ride.find({ status: 'waiting' }).select("-trips.*.passengers")

我試圖 select中的所有項目然后刪除每個相應的乘客字段

它沒有效果

這就是響應的樣子

[
    {
        "_id": "632a1669279c86f4ab3a4bf5",
        "boat_operator": "6328c434a98212a7f57c4edc",
        "trips": {
            "2019": {
                "passengers": [],
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bfe"
            },
            "2020": {
                "passengers": [],
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bfc"
            },
            "2021": {
                "passengers": [],
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bfa"
            },
            "2022": {
                "passengers": [],
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bf8"
            }
        }
    }
]

我想在返回的文檔中排除乘客字段

這將解決它

const rides = await Ride.aggregate([
        { "$match": { "status": "waiting" } },
        { $project: { "trips": { $objectToArray: '$trips' } } },
        { $project: { 'trips.v.passengers': 0 } },
        { $project: { "trips": { $arrayToObject: '$trips' } } }
    ]);

這是退回的文件

{
        "_id": "632a1669279c86f4ab3a4bf5",
        "trips": {
            "2019": {
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bfe"
            },
            "2020": {
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bfc"
            },
            "2021": {
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bfa"
            },
            "2022": {
                "available_seats": 5,
                "_id": "632a1669279c86f4ab3a4bf8"
            }
        }
 }

暫無
暫無

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

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