mongodb

Ajax-запрос -- бесконечно выполняющийся, дольше чем время выполнения скрипта на сервере (мистика)

По-идее такого быть не может, что что-то похожее наблюдалось с присутствием цикла while и выполнения запроса к mongodb.

При этом сама монга в диспетчере линукса (top) показывала, что занимает 300 процентов CPU, другие запросы к ней тоже выполнялись медленно до тех пор, пока процесс монги не был перезагружен.

yii2 mongodb $cursor->toArray Работает слишком медленно -- как ускорить выборку больших объёмов данных из mongo в проложение

Вызов типа:

$cursor = \Yii::$app->mongodb->createCommand(\Yii::$app->mongodb->getQueryBuilder()->aggregate(
		$collection->name, $pipeline, 
		['allowDiskUse' => true, 'cursor' => ['batchSize' => $this->batchSize]]))->execute();

$resultArray = $cursor->toArray();

-- практически все время при большой выборке потратит на вызов toArray(), и это будет проходить медленно.

Итерируемся сами

Можно итерироваться по курсору, без вызова toArray(), но даже пустая итерация типа:

mongodb sprace Индекс и скорость сортировки

mongodb 3.4 не использует спрэйс индексы, если не во всех документах есть указанные значения:
Актуальная информация: https://docs.mongodb.com/manual/core/ind...

Используйте индексы без sprace, если вы не уверены в том, что в каждом документе есть идексируемые поля.

yii2 aggregation result exceeds maximum document size (16MB) -- Проблем, решение

Обновлено: проблема закрыта выпуском обновления: https://github.com/yiisoft/yii2-mongodb/...

Проблема в том, как извлекает ответ с использованием курсора функция:

public function aggregate($collectionName, $pipelines, $options = [])

из vendor/yiisoft/yii2-mongodb/Command.php

-- но это проблему можно обойти написав свой метод: Прямо в контроллере:

mongodb aggregation result exceeds maximum document size (16MB) --

aggregation result exceeds maximum document size (16MB)

-- превышен размер документа в результате агрегации.

Причина

Yii2 как-то не так работает с курсором.

Решение

Можно использовать batchSize для cursor :

'cursor' => ['batchSize' => $this->batchSize]

(синтаксис php для yii2)
Что почитать:

yii2 mongodb pull -- Удалить документ из подмассива (не перезаписывая целиком) -- вложенные документы

Выясняем как сделать операцию обратную $push.

Вот так должно работать:

$result = $collection->update(
	array("_id" => new ObjectID(Yii::$app->request->post('report-id'))), 
	array('$pull' => array("_comments" => 
		array (
			'user_id' => new ObjectID($user_id),
			'text' => $text,
			'create_timestamp' => (int) $create_timestamp
		))
	)
);

А вот запрос на ту же тему (но только выборка по одному полю) не посредственно к монге в командной строке:

yii2 mongodb Добавить элемент (документ) в подмассив не перезаписывая его целиком -- $push

Как-то так:

$collection = Yii::$app->mongodb->getCollection($collectionName);

$commentData = Yii::$app->request->post('Comment');

$collection->update(
	array("_id" => new ObjectID(Yii::$app->request->post('report-id'))), 
	array('$push' => array("_comments" => 
		array (
			'elem_id' => $commentData['elem_id'],
			'text' => $commentData['text'],
			'create_timestamp' => (new \DateTime())->getTimestamp()
		))
	)
);

где _comments -- имя подмассива в документе

yii2 Setting unknown property Model -- как исправить ошибку

Exception (Unknown Property) ;yii\base\UnknownPropertyException; with message ;Setting unknown property: ....

Если вы используете consultnn\embedded\EmbeddedDocument или вообще любую структуру, уснаследованную не от AcitveRecord а от Model, то приходится помимо массива из attributes() в модели создавать ещё и поля класса:

то есть писать как-то так:

Pages

Subscribe to RSS - mongodb