Используйте поиск в массиве объектов с идентификаторами - PullRequest
0 голосов
/ 28 мая 2018

У меня проблема с использованием поиска в массиве объектов.

Моя структура

type MerchantList struct {
    MerchantID       bson.ObjectId    `json:"merchantId,omitempty" bson:"merchantId,omitempty"`
    Merchant         *Merchant        `json:"merchant,omitempty" bson:"merchant,omitempty"`
    MerchantRevenue  float64          `json:"merchantRevenue" bson:"merchantRevenue"`
    MerchantFee      int              `json:"merchantFee,omitempty" bson:"merchantFee,omitempty"`
}

type Weeks struct {
    ID               bson.ObjectId    `json:"id,omitempty" bson:"_id,omitempty" description:"Object ID"`
    MerchantList     []*MerchantList  `json:"merchantList,omitempty" bson:"merchantList,omitempty"`
    CreatedAt        int64            `json:"createdAt" bson:"createdAt" description:"Created date."`
    UpdatedAt        int64            `json:"updatedAt" bson:"updatedAt" description:"Updated date."`
}

У меня есть коллекция, структурированная следующим образом:

{
    "_id" : ObjectId("5af8bdb20b0aa02928514a00"),
    "name" : "Week 1",
    "merchantList" : [ 
        {
            "merchantId" : ObjectId("5ad79c500b0aa07ed040fe4b"),
            "merchantRevenue" : 126500.0,
            "merchantFee" : 25
        }
    ]
}

Мой запрос:

pipe := []bson.M{
    {"$unwind": bson.M{
        "path": "$merchant.merchantList",
        "preserveNullAndEmptyArrays": true}},
    {"$lookup": bson.M{
        "from":         "merchant",
        "localField":   "merchantList.merchantId",
        "foreignField": "_id",
        "as":           "merchant",
    }},
}

Я бы ожидал выхода из программы примерно так:

{
    "items": [
        {
            "id": "5af8bdb20b0aa02928514a00",
            "merchantList": [
                {
                    "merchantId": "5ad79c500b0aa07ed040fe4b",
                    "merchant": {
                        "name": "Merchant 1"
                    }
                }
            ],
        }
    ]
}

Если у кого-то есть идеи, как это сделать.Было бы очень полезно:)

...