You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AQL查询实现嵌套多语言翻译字段的指定语言筛选

多语言翻译文档的AQL查询方案(指定双语言+默认 fallback)

需求背景

现有多语言翻译文档结构如下:

texts:{
  id1:{
    "en":"welcome",
    "es":"bienvenido",
    "de":"Willkommen "
  },
  id2:{
    "en":"good bye",
    "es":"adios",
    "de":"tschüss"
  }
}

需要通过单次AQL查询获取指定两种语言(如英文en和西班牙文es)的翻译内容,其中英文为默认语言——当目标语言无翻译内容时,自动 fallback 到英文。


核心AQL查询实现

1. 针对单个翻译ID的查询(硬编码示例)

直接指定目标ID和语言,返回包含英文和目标语言的翻译结果:

FOR doc IN translations
RETURN {
  id1: {
    en: doc.texts.id1.en,
    es: COALESCE(doc.texts.id1.es, doc.texts.id1.en)
  }
}
  • 关键逻辑:COALESCE函数会返回第一个非空/存在的值,自动实现"目标语言为空则用英文"的 fallback 逻辑。

2. 动态参数化查询(推荐,适配PHP调用)

通过绑定参数动态指定目标ID和语言,避免硬编码,提升复用性:

FOR doc IN translations
RETURN {
  [@targetId]: {
    en: doc.texts[@targetId].en,
    [@targetLang]: COALESCE(doc.texts[@targetId][@targetLang], doc.texts[@targetId].en)
  }
}
  • [@targetId]和[@targetLang]是AQL的动态属性语法,允许通过外部参数传入字段名。

3. 批量获取多个翻译ID的查询

如果需要同时获取多个ID的翻译,可结合MERGE函数实现:

FOR doc IN translations
RETURN MERGE(
  FOR id IN @targetIds
  RETURN {
    [id]: {
      en: doc.texts[id].en,
      [@targetLang]: COALESCE(doc.texts[id][@targetLang], doc.texts[id].en)
    }
  }
)

PHP中执行查询的完整代码示例

使用ArangoDB官方PHP驱动实现调用:

<?php
require 'vendor/autoload.php';

use ArangoDBClient\Connection;
use ArangoDBClient\Statement;

// 1. 建立数据库连接
$connection = new Connection([
    'server' => 'tcp://localhost:8529',
    'database' => 'your_database_name',
    'authType' => 'basic',
    'authUser' => 'your_username',
    'authPasswd' => 'your_password'
]);

// 2. 定义绑定参数(可根据业务动态调整)
$bindVars = [
    'targetId' => 'id1',
    'targetLang' => 'es'
    // 如果是批量查询,替换为:
    // 'targetIds' => ['id1', 'id2'],
    // 'targetLang' => 'es'
];

// 3. 编写AQL语句(对应上面的动态参数化版本)
$query = <<<AQL
FOR doc IN translations
RETURN {
  [@targetId]: {
    en: doc.texts[@targetId].en,
    [@targetLang]: COALESCE(doc.texts[@targetId][@targetLang], doc.texts[@targetId].en)
  }
}
AQL;

// 4. 执行查询并获取结果
$statement = new Statement($connection, ['query' => $query, 'bindVars' => $bindVars]);
$cursor = $statement->execute();
$result = $cursor->getAll();

// 输出结果
print_r($result);
?>

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:03:17