Выполнение функции MongoDB

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

Выполнение функции MongoDB

Сообщение pavelbn »

Есть функция для автоинкремента в монго дб:

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

function getNextSequence(name) {
   var ret = db.counters.findAndModify(
          {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true
          }
   );
return ret.seq;
}
В Yii2 стоит yii2-mongodb.
Необходимо выполнить запрос с функцией:

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

db.users.insert(
   {
     count: getNextSequence("count"),
   }
)
При:

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

$collection = Yii::$app->mongodb->getCollection(['db', 'users']);
$collection->update([], ['count' => 'getNextSequence("count")']);
Просто присваивается строка 'getNextSequence("count")', что нормально.
Но вот как выполнить функцию самой MongoDB?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Выполнение функции MongoDB

Сообщение ElisDN »

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

=> new Expression('getNextSequence("count")')
pavelbn
Сообщения: 2
Зарегистрирован: 2021.10.22, 15:46

Re: Выполнение функции MongoDB

Сообщение pavelbn »

Спасибо за ответ, но сделал через php.

Создаём коллекцию со счётчиком:

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

db.counters.insert(
   {
      _id: "userid",
      seq: 0
   }
)
И статический метод, который будет получать порядковый номер:

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

    /**
    * Get counter number.
    *
    * @param string $id
    * @return integer
    */
    public static function getNextSequence($id) {
        $collection = Yii::$app->mongodb->getCollection(['db', 'counter']);
        $res = $collection->findAndModify(['_id' => $id], ['$inc' => ['seq' => 1]]);

        return $res['seq'];
    }
Ответить