如何在交易中获取插入文档的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并将其插入创建者和新组之间的关系集合中。

基本上使组的创建者成为管理员。

">致命错误:未捕获的triages\ArangoDb\ServerException:17 db.groups.insert(…(.toArray不是函数"。

有什么解决方案吗?

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)});
...

最新更新