如何在事务中获取插入文档的id? (阿兰戈数据库)
How to get inserted document's id in transaction? (arangoDB)
我在网上搜索了很多线索,但似乎找不到任何...
public function createNew($name, $type, $restriction,$picture){
global $connection;
$trans=new Transaction($connection,array( 'collections' => array( 'write' => array( 'group_relations','groups' ),'read'=> array( 'group_relations','groups' ) ), 'waitForSync' => true ));
$trans->setAction('function(){
var db= require("@arangodb").db;
var arr=db.groups.insert({"name":"'.$name.'","type":"'.$type.'","restriction":"'.$restriction.'","picture":"'.$picture.'"}).toArray();
db.group_relations.insert({"_from":"users/'.$_SESSION['uid'].'","_to":"groups/"+arr[0]["_id"],"status":"admin"});
}');
$trans->execute();
}
这是一个进行交易的PHP函数。在事务中,我试图创建一个组,获取它的 id 并将其插入到创建者和新组之间的关系集合中。
基本上将组的创建者设为管理员。
"Fatal error: Uncaught triagens\ArangoDb\ServerException: 17 db.groups.insert(...).toArray is not a function".
有什么解决办法吗?
insert({...})
的结果总是一个对象。 insert([{...},{...},...,{...}])
的结果总是一个数组。在任何一种情况下 .toArray()
都无济于事。
因此,如果您想确保结果类型为数组,请对单个条目也使用数组 insert
:
var arr=db.groups.insert(
[{"name":"'.$name.'",
"type":"'.$type.'",
"restriction":"'.$restriction.'",
"picture":"'.$picture.'"}]);
因此,为了仅从您的插入中取回 ID:
var ids = [];
db.groups.insert([{...},...,{...}]).forEach(
function(obj) {ids.push(obj._id)});
...
我在网上搜索了很多线索,但似乎找不到任何...
public function createNew($name, $type, $restriction,$picture){
global $connection;
$trans=new Transaction($connection,array( 'collections' => array( 'write' => array( 'group_relations','groups' ),'read'=> array( 'group_relations','groups' ) ), 'waitForSync' => true ));
$trans->setAction('function(){
var db= require("@arangodb").db;
var arr=db.groups.insert({"name":"'.$name.'","type":"'.$type.'","restriction":"'.$restriction.'","picture":"'.$picture.'"}).toArray();
db.group_relations.insert({"_from":"users/'.$_SESSION['uid'].'","_to":"groups/"+arr[0]["_id"],"status":"admin"});
}');
$trans->execute();
}
这是一个进行交易的PHP函数。在事务中,我试图创建一个组,获取它的 id 并将其插入到创建者和新组之间的关系集合中。
基本上将组的创建者设为管理员。
"Fatal error: Uncaught triagens\ArangoDb\ServerException: 17 db.groups.insert(...).toArray is not a function".
有什么解决办法吗?
insert({...})
的结果总是一个对象。 insert([{...},{...},...,{...}])
的结果总是一个数组。在任何一种情况下 .toArray()
都无济于事。
因此,如果您想确保结果类型为数组,请对单个条目也使用数组 insert
:
var arr=db.groups.insert(
[{"name":"'.$name.'",
"type":"'.$type.'",
"restriction":"'.$restriction.'",
"picture":"'.$picture.'"}]);
因此,为了仅从您的插入中取回 ID:
var ids = [];
db.groups.insert([{...},...,{...}]).forEach(
function(obj) {ids.push(obj._id)});
...