MongoDBについて聞いたことがありますが、この概念を完全に理解しているとは確信できません。
MongoDBに複数のJSONオブジェクトが保存されている場合:
[{"id": "peter",
"age": "12",
"gender": "male"},
{"id": "gemma",
"age": "12",
"gender": "female"},
{"id": "paul",
"age": "13",
"gender": "male"}]
age >= 12
を使用してすべてのJSONオブジェクトをクエリするにはどうすればよいですか?
まず、JSONは単なるシリアル化手法であることを理解してください。それ自体で、このシリアル化方法はおそらく永続化メディアを決定すべきではありません。表面的にあなたの質問を見ると、探しているのは、SQLを使用して柔軟にデータを照会できる典型的なリレーショナルストレージデータベースのようです。
JSONデータをこのようなリレーショナルデータベースから取得した後、保存または表示するためにシリアライズ/デシリアライズすることは、ほとんどすべてのプログラミング言語で簡単です。
本当に固定構造を持たないJSONドキュメント(または他の種類のドキュメント)のさまざまなスニペットを本当に保存する必要がある場合、通常はMongoDBなどのNoSQLタイプのソリューションを検討し始めます。より一般的なNoSQLデータベースを使用するためのもう1つの考えられるシナリオは、大量のデータを処理しており、水平方向にスケーリングする必要がある場合です(つまり、データが非常に大きいため、データベースを複数のサーバーにスケーリングする必要があります)。多くのNoSQLシステムは、これを従来のリレーショナルDBよりもはるかに簡単にします。もちろん、このようなシナリオでは、ユースケースに最も役立つ方法でデータの読み取り、書き込み、クエリを実行できるようにするために、提供する機能に基づいてこれらのツールを評価する必要があります。
5.7以降、MySQLにはネイティブ JSONデータ型 が追加されました。テーブルがstudents
と呼ばれ、JSON列がstudent
と呼ばれると仮定すると、MySQL 5.7では、selectは次のように記述できます。
SELECT * FROM students WHERE JSON_EXTRACT(student, '$.age') = 12;
MongoDBは、JSONに似たBSON形式でデータを保存します。 JSON形式でデータを保存し、任意のフィールドでクエリを作成できます。主要なクエリに使用される特定のフィールドにインデックスを付けることもできます。
あなたはMongoDBに限定されていません。あなたの質問を見れば、ドキュメントストアはあなたのニーズに合っていると思います。詳細はこちらをご覧ください: http://en.wikipedia.org/wiki/Document-oriented_database
すべてのオブジェクトに同じフィールド(id、age、genderなど)がある場合、オブジェクトをリレーショナルデータベース(MySQLなど)の行として保存する必要があります。
そのためのmongodbシェルクエリは次のようになります。
db.people.find({"age": {gt:12 }});
Couchbase N1QLクエリは次のようになります。
SELECT * FROM people WHERE age >= 12;
詳細については、 https://query.couchbase.com を参照してください。