yii2-mongodb не тривиальные команды в миграциях

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

yii2-mongodb не тривиальные команды в миграциях

Сообщение S c »

Подготовил комманду:

Код: Выделить всё

db.project.updateMany(
    {
        "offers": {$ne: []},
        "offers.productsWithInfo": {$exists: false},
    },
    [
        {
            $set: {
                "offers": {
                    $map: {
                        input: "$offers",
                        in: {
                            $mergeObjects: [
                                "$$this",
                                {
                                    productsWithInfo: {
                                        $map: {
                                            input: "$$this.products",
                                            as: "product",
                                            in: {
                                                product: "$$product",
                                                productInfo: null,
                                            },
                                        },
                                    },
                                },
                            ],
                        },
                    },
                },
            },
        },
    ]
)
в монго консоле работает норм.
перенёс её в миграцию:

Код: Выделить всё

public function up()
{
    $this->update(
        self::COLLECTION,
        [
            'offers' => ['$ne' => []],
            'offers.productsWithInfo' => ['$exists' => false],
        ],
        [
            '$set' => [
                'offers' => [
                    '$map' => [
                        'input' => '$offers',
                        'in' => [
                            '$mergeObjects' => [
                                '$$this',
                                [
                                    'productsWithInfo' => [
                                        '$map' => [
                                            'input' => '$$this.products',
                                            'as' => 'product',
                                            'in' => [
                                                'product' => '$$product',
                                                'productInfo' => null,
                                            ],
                                        ],
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    );
}
в итоге у меня в "offers" теперь хранится:

Код: Выделить всё

    "offers": {
      "$map": {
        "input": "$offers",
        "in": {
          "$mergeObjects": ["$$this",
            {
              "productsWithInfo": {
                "$map": {
                  "input": "$$this.products",
                  "as": "product",
                  "in": {
                    "product": "$$product",
                    "productInfo": null
                  }
                }
              }
            }
          ]
        }
      }
    },
вместо данных.
Как в миграцию запихнуть сложный запрос?
при работу с mysql была возможность использовать createCommand + execute
могу ли я как то в монго сырую команду прокинуть?
Ответить