Я хочу использовать этот запрос MongoDB из PHP скрипта:MongoDB с PHP: Bulk.upsert() вставка с функцией PHP Execute
Bulk.find(<query>).upsert().update(<update>);
Doc от операции MongoDB: http://docs.mongodb.org/manual/reference/method/Bulk.find.upsert/#Bulk.find.update
Doc от операция выполнения PHP: http://php.net/manual/en/mongodb.execute.php (см. пример №3).
Я пытаюсь использовать пример №. 3 из документа PHP, чтобы сделать массовое действие для моего приложения.
Но эквивалентный код не работает.
Функция JS Перехожу к MongoDB для операций upsert thrue Объекта РНР MongoCode: (http://php.net/manual/en/class.mongocode.php)
$function="function(idClient,name){
bulk.find({idc:idClient,pid:partnerId}).upsert().update(
{
\$setOnInsert: {idc:idClient,pid:partnerId,dateCreate:new Date()},
\$set: {name:name,n:0},
});}";
$function=new \MongoCode($function,array('partnerId'=>$partnerId));
В 3 варианте я testet:
С вариантом Var:
// 1
$db->execute(new \MongoCode('var bulk = db.MyCollection.initializeUnorderedBulkOp();'));
while ([...])
{
[...]
// 2
$db->execute($function,array($idClient,$name));
}
// 3
$db->execute(new \MongoCode('bulk.execute();'));
1 возврат: "исключение: SyntaxError : Неожиданный вар маркер»
2 возвращается: "исключение: ReferenceError: объем не определен"
3 возвращает: "исключение: ReferenceError: объем не определен"
Без варианта вара:
// 1
$db->execute(new \MongoCode('var bulk = db.MyCollection.initializeUnorderedBulkOp();'));
while ([...])
{
[...]
// 2
$db->execute($function,array($idClient,$name));
}
// 3
$db->execute(new \MongoCode('bulk.execute();'));
1 возвращает массив: ([...], "OK" => 1)
2 в первых возвращений встречаемости: а rray ([...], "ОК" => 1)
2 во втором возвращается вхождение: "исключение: ReferenceError: объем не определен"
3 возвращает: «исключение: ReferenceError: объем не определенно»
без варианта вара без времени:
// 1
$db->execute(new \MongoCode('var bulk = db.MyCollection.initializeUnorderedBulkOp();'));
//2
$db->execute($function,array($idClient,$name));
// 3
$db->execute(new \MongoCode('bulk.execute();'));
1 возвраты: массив ([...], "OK"=> 1)
2 возвращается : Массив ([...], "OK" => 1)
3 возвращает массив: ([...], "OK" => 1)
3-я вариант работает, но я хочу для увеличения 240 000 документов, и я нормально не должен создавать новый UnorderedBulkOp() для каждого upsert.
Я использую MongoDB 2.6.7 с PHP 2.6.4.
Знает ли кто-нибудь, как я могу это сделать?
Thnak вы
В оболочном модусе работают те же операции. – Alsatian
, потому что каждый экземпляр mongocode находится в своем собственном экземпляре - они теперь знают друг о друге. – Tobias