リンク配列の属性クエリ引数による検索

Deeplからの自動翻訳

4D v15で導入されたオブジェクトフィールドは、非構造化データの保存とインデックス作成を可能にします。これは、名前、苗字、誕生日のような共通のデータセットかもしれません。例えば、靴(サイズ、色)、コンピュータ(CPU、メモリ)、プリンター(色、インク)、値のリスト、またはすべての組み合わせの異なる属性が必要なショップのように、レコードごとに異なるデータである可能性もあるのです。

ここに、4Dのお客様からの実際のユーザーストーリーがあります。

「私のバッジアプリケーションは、建物への各人のアクセス権や時間枠を管理しますこの情報は、オブジェクトの配列としてデータベースに保存されています(例:{access right, building, time slot})。ある時間帯にある建物にアクセスできる人を探したい」。

4Dは、データを照会するためのいくつかの方法を提供し、インデックスを使用するので、非常に高速です。

4D v16 R2では、さらに機能を強化し、1つのオブジェクトの要素のリスト内部でさらに複雑なクエリーができるようになります。複数のクエリ引数をAND演算子で結合して配列属性で検索する場合、以下のようなレコードを取得することができます。

  • マッチする引数が、少なくともひとつの要素に存在する
  • マッチする引数が同じ要素にある(新規)

次の2つのレコードを例にとって考えてみましょう。

{
    "name":"martin",
    "locations": [ 
        { "kind":"home", "city":"paris" } ]
 } , {
    "name":"smith",
    "locations": [
        { "kind":"home", "city":"lyon" },
        { "kind":"office", "city":"paris" } ]
 }

home “の位置の種類が都市“paris“にある人を探したいとします。

マッチする引数が少なくとも1つの要素にある

と書くと

QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[].city";=; "paris")

このクエリでは、martinsmithが返されます。smith“locations”要素のkind“homecityparis なので、同じ要素ではないにせよ、”martinsmithを返しています。

一致する引数が同じ要素にある

と書くと

QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[a].kind";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[a].city";=; "paris")

このクエリーは、 martin を返します。このクエリはsmithを返しません。なぜなら、”homeparisという値は同じ配列要素に存在しないからです。

一致する引数が同じ要素にあるレコードのみを取得したい場合は、 リンクした引数を使用する必要があります。クエリ引数をリンクするには、リンクする最初のパスの[ ]の間に文字を追加し、リンクしたすべての引数で同じ文字を繰り返します。

例: locations[a].citylocations[a].kind.同じクエリで異なるリンク条件を追加するには、別の文字を使用します。以下のサンプルデータベースをダウンロードして、より多くの例を見ることができます。

データベース例

詳細は、4D v16 R2のドキュメントを参照してください。

Vanessa Talbot
- プロダクトオーナー - Vanessa Talbotは、2014年6月に4Dプログラムチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。入社以来、4Dにおける主要機能の定義に関わってきました。プリエンプティブ/マルチスレッドの新機能の大部分と、非常に複雑なテーマである組み込みアプリケーションの新アーキテクチャに取り組んできました。VanessaはTelecom Saint-Etienneで学位を取得後、Criminal Research Institute でオーディオビジュアル部門の開発者としてキャリアをスタートさせました。また、メディアや医療の分野でも、技術サポートやプロダクションの分野で働いてきました。