43

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

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

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

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

4

6 回答 6

51

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

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

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

于 2013-10-04T20:36:35.037 回答
18

从 5.7 开始,MySQL 现在具有原生JSON 数据类型。假设您的表被调用students并且 JSON 列被调用student,在 MySQL 5.7 中,您的选择可以写为

SELECT * FROM students WHERE JSON_EXTRACT(student, '$.age') = 12;
于 2016-04-24T02:16:09.970 回答
15

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

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

于 2013-12-24T09:40:26.607 回答
7

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

于 2013-10-04T20:08:26.113 回答
3

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

db.people.find({"age": {gt:12 }});
于 2018-03-02T01:42:57.097 回答
0

Couchbase N1QL 查询将如下所示:

SELECT * FROM people WHERE age >= 12;

有关更多详细信息,请参阅https://query-tutorial.couchbase.com/tutorial/#1

于 2018-07-09T21:53:22.813 回答