从数据库中存储和查询JSON

时间:2013-10-04 20:04:57

标签: json database mongodb

我听说过MongoDB,但我不确定我是否完全理解这个概念。

如果我在MongoDB中存储了多个JSON对象:

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

我如何能够使用age >= 12查询所有JSON对象?

6 个答案:

答案 0 :(得分:44)

首先,要了解JSON只是一种序列化技术。就其本身而言,这种序列化方法可能不应该确定您的持久性介质。从表面上看问题,看起来您正在寻找的是一个典型的关系存储数据库,您可以使用SQL以灵活的方式查询数据。

在从这样的关系数据库中检索之后,序列化/反序列化JSON数据以便存储到或用于呈现在几乎任何编程语言中都是微不足道的。

现在,如果您真的需要存储不具有固定结构的JSON文档(或任何其他类型的文档)的各种片段,那么您通常会开始查看NoSQL类型的解决方案,例如MongoDB的。使用更流行的NoSQL数据库的另一种可能的情况是,当您处理大量数据并需要水平扩展时(即数据太大,您需要跨多个服务器扩展数据库)。许多NoSQL系统比传统的关系数据库更容易做到。当然,在这种情况下,您需要根据它们提供的功能评估这些工具,以便以最有用的方式为您的用例读取,编写和查询数据。

答案 1 :(得分:14)

MongoDB以BSON格式存储数据,类似于JSON。您可以以JSON格式存储数据,并可以对任何字段进行查询。您甚至可以索引用于主要查询的特定字段。

您不仅限于MongoDB,看到您的问题我认为任何文档存储都将满足您的需求。你在这里阅读更多: - http://en.wikipedia.org/wiki/Document-oriented_database

答案 2 :(得分:14)

从5.7开始,MySQL现在具有原生JSON datatype。假设您的表名为students且JSON列名为student,则在MySQL 5.7中您的选择可以写为

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

答案 3 :(得分:6)

如果所有对象都有相同的字段(id,年龄,性别等),则应将对象存储为某个关系数据库(例如MySQL)的行。

答案 4 :(得分:2)

对此的mongodb shell查询可能如下所示:

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

答案 5 :(得分:0)

Couchbase N1QL查询将如下所示:

SELECT * FROM people WHERE age >= 12;

有关更多详细信息,请参见https://query.couchbase.com