我来自Postgres的背景,我正在考虑是否应该在我的下一个项目中使用noSQL数据库,例如mongoDB。为此,我有几个问题
是否可以在noSQL中执行可以获取具有某些公共子文档/属性的所有文档的查询,例如"选择country = italy"
的所有用户另外,如何在noSQL中处理冗余?说我有一个文件代表一个多人可以拥有的特定车型。那么我是否必须在所有这些People文档中插入相同的确切数据,描述给定的汽车模型?
由于
答案 0 :(得分:1)
当然你可以使用MongoDB中的where子句(和其他NoSQL引擎)进行查询,如果我举个例子,你会将用户存储到一个名为“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
回答关于用户和汽车的问题,将是“这取决于您的应用程序”。
如果您的应用程序主要是阅读,并且您需要大部分有关汽车和电脑的数据。用户,复制(非规范化),将是一个很容易使开发变得容易的方法。 (是的,当你必须更新信息时,你需要更多的工作......)。博客文章和文档应该可以帮助您找到自己的方式。
答案 1 :(得分:0)
是的,您可以在MongoDB中对具有公共子文档/属性的文档执行查询。 MongoDB鼓励嵌入(去标准化)数据,因为磁盘空间很便宜,嵌入文档可以带来更好的查询性能。是的,嵌入文档意味着在Car模型中的所有People文档中插入相同的数据。但是如果你想避免重复/去标准化,那么你可以去参考'这是一个存储数据的规范化模型:People集合将包含人员文档,Car集合将包含汽车文档,类似于我们在rdbms中的内容。但MongoDB并没有强加主/外键关系。您最终会在代码中进行连接,因此查询性能会降低。