web-dev-qa-db-ja.com

データベースからのJSONの保存とクエリ

MongoDBについて聞いたことがありますが、この概念を完全に理解しているとは確信できません。

MongoDBに複数のJSONオブジェクトが保存されている場合:

[{"id": "peter",
  "age": "12",
  "gender": "male"},
 {"id": "gemma",
  "age": "12",
  "gender": "female"},
 {"id": "paul",
  "age": "13",
  "gender": "male"}]

age >= 12を使用してすべてのJSONオブジェクトをクエリするにはどうすればよいですか?

39
Jakob

まず、JSONは単なるシリアル化手法であることを理解してください。それ自体で、このシリアル化方法はおそらく永続化メディアを決定すべきではありません。表面的にあなたの質問を見ると、探しているのは、SQLを使用して柔軟にデータを照会できる典型的なリレーショナルストレージデータベースのようです。

JSONデータをこのようなリレーショナルデータベースから取得した後、保存または表示するためにシリアライズ/デシリアライズすることは、ほとんどすべてのプログラミング言語で簡単です。

本当に固定構造を持たないJSONドキュメント(または他の種類のドキュメント)のさまざまなスニペットを本当に保存する必要がある場合、通常はMongoDBなどのNoSQLタイプのソリューションを検討し始めます。より一般的なNoSQLデータベースを使用するためのもう1つの考えられるシナリオは、大量のデータを処理しており、水平方向にスケーリングする必要がある場合です(つまり、データが非常に大きいため、データベースを複数のサーバーにスケーリングする必要があります)。多くのNoSQLシステムは、これを従来のリレーショナルDBよりもはるかに簡単にします。もちろん、このようなシナリオでは、ユースケースに最も役立つ方法でデータの読み取り、書き込み、クエリを実行できるようにするために、提供する機能に基づいてこれらのツールを評価する必要があります。

46
Mike Brant

5.7以降、MySQLにはネイティブ JSONデータ型 が追加されました。テーブルがstudentsと呼ばれ、JSON列がstudentと呼ばれると仮定すると、MySQL 5.7では、selectは次のように記述できます。

SELECT * FROM students WHERE JSON_EXTRACT(student, '$.age') = 12;
15
Sophia Feng

MongoDBは、JSONに似たBSON形式でデータを保存します。 JSON形式でデータを保存し、任意のフィールドでクエリを作成できます。主要なクエリに使用される特定のフィールドにインデックスを付けることもできます。

あなたはMongoDBに限定されていません。あなたの質問を見れば、ドキュメントストアはあなたのニーズに合っていると思います。詳細はこちらをご覧ください: http://en.wikipedia.org/wiki/Document-oriented_database

14
Manu Viswam

すべてのオブジェクトに同じフィールド(id、age、genderなど)がある場合、オブジェクトをリレーショナルデータベース(MySQLなど)の行として保存する必要があります。

6
tskuzzy

そのためのmongodbシェルクエリは次のようになります。

db.people.find({"age": {gt:12 }});
2
charles ross

Couchbase N1QLクエリは次のようになります。

SELECT * FROM people WHERE age >= 12;

詳細については、 https://query.couchbase.com を参照してください。

0
Keshav Murthy