【问题标题】:Performing 'find all documents that ...' queries执行“查找...的所有文档”查询
【发布时间】:2014-08-25 14:13:25
【问题描述】:

我来自 Postgres 背景,我目前正在考虑是否应该在我的下一个项目中使用 mongoDB 等 noSQL 数据库。为此我有几个问题

是否可以在 noSQL 中执行查询,以获取具有某些共同子文档/属性的所有文档,例如“选择 country = italy 的所有用户”

另外,noSQL 中的冗余是如何处理的?假设我有一个文档,该文档代表可以多人拥有的给定汽车模型。然后我是否必须在所有这些 People 文档中插入相同的确切数据,描述给定的汽车型号?

谢谢

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    当然,您可以在 MongoDB(和其他 NoSQL 引擎)中使用 where 子句进行查询,如果我以您为例,您会将用户存储到名为“users”的“集合”中,并以或多或少相同的方式查询它.

    db.users.find( { "country" : "Italy" } );
    

    MongoDB 有一个非常丰富和强大的查询和聚合引擎(http://docs.mongodb.org/manual/tutorial/query-documents/),我邀请您关注教程(http://docs.mongodb.org/manual/tutorial/getting-started/)或免费在线培训(http://university.mongodb.com),以了解更多信息。 插入文档也很简单:

    db.users.insert( {"first_name" : "John", "last_name" : "Doe", "country" : "USA" }  );
    

    就是这样!

    您谈到冗余,就像在您的 SQL 世界中,它在很大程度上取决于设计。在 MongoDB 中,您将根据您的业务需求组织文档和它们之间的链接(链接或嵌入文档)。在这种情况下很难给出关于文档设计的答案,所以我会邀请你阅读一些有趣的文章:

    MongoDB 文档:http://docs.mongodb.org/manual/data-modeling/

    MongoDB 博客,MongoDB 模式设计的 6 条经验法则(第 1、2、3 部分) http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1 http://blog.mongodb.org/post/87892923503/6-rules-of-thumb-for-mongodb-schema-design-part-2 http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3

    关于用户和汽车的问题的答案是“这取决于您的应用程序”。

    如果您的应用程序主要被读取,并且您需要有关汽车和用户的大部分数据,那么复制(非规范化)将是简化开发的好方法。 (是的,当您必须更新信息时,您将需要更多的工作......)。博客文章和文档应该可以帮助您找到自己的方式。

    【讨论】:

      【解决方案2】:

      是的,您可以在 MongoDB 中对具有共同子文档/属性的文档进行查询。 MongoDB 鼓励嵌入(反规范化)数据,因为磁盘空间便宜,嵌入文档可以提高查询性能。是的,嵌入文档意味着在 Car 模型中的所有 People 文档中插入相同的数据。但是如果你想避免重复/反规范化,那么你可以选择“引用”,这是一个规范化的模型,它存储类似这样的数据:人集合将包含人员文档,汽车集合将包含汽车文档,类似于我们有 rdbms。但主/外键关系不是 MongoDB 强加的。您最终会在代码中进行连接,因此查询性能会下降。

      【讨论】:

      • 我明白了,如何通过非规范化来确保数据完整性?假设我想更改 Car 文档的某些属性,我是否必须访问每个 Person 文档并更新 Car 子文档,这种方法对于更大的数据集是否可行?
      猜你喜欢
      • 2019-01-12
      • 2023-03-30
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2014-02-27
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多