我是mongoDB的新手,在一个节点项目中,我正在使用mongoose为我的数据库创建一个模式。我已经明白,在我的情况下,我应该使用嵌入数据而不是引用。 (http://docs.mongodb.org/manual/core/data-modeling-introduction/)
我需要存储在数据库中的结构是这样的:
来自mySQL世界,我正在尝试理解noSQL数据库概念,我想知道如何设计mongoose模式。
THX,
答案 0 :(得分:1)
首先看一下这个Martin Fowlers excellent video:
我认为没有更好的权威可以解释nosql,然后福勒。特别是了解他的sql背景。
其次,MongoDB遵循json架构。如果您知道如何使用json,您将知道如何使用nosql(mongodb)。需要理解的基本事情是Mongo模式以使用它的语言表达。 因此,如果您将NodeJS与Mongo一起使用,您仍然可以使用对象和数组。简单来说,Mongo并没有强制任何特定的架构。开发人员根据他的语言/ mongo驱动程序创建他的方案。
那么您如何用您的语言表达数据逻辑?如果是JS对象的形式,则将该表单移动到db。
我非常喜欢MongoDB,因为它可以与一些优秀的JS工具结合使用,例如 Underscore.js ,用于所有类型的数据操作。
答案 1 :(得分:1)
您可以嵌套文档,并在MongoDB文档中记录数组:
db.books.findOne();
可以返回JSON:
{
isbn:"253GHST78F6",
title:"some book",
author:"Earnest Hemmingway",
chapters:[
{title:"chapter 1",content:"http://api.com/chapters/1.html"},
{title:"chapter 2",content:"http://api.com/chapters/2.html"}
]
}
但是,在MongoDB中对集合进行建模时,还需要记住一些事项:
尽可能接近要求的模型数据:MongoDB中没有 Joins ,因此,请尝试将所有此类数据保存在一起(预加入)< / em>,这应该在将来一起被查询。
嵌套适用于查询,但嵌套更新和搜索很糟糕:
MongoDB中没有 Foriegn Keys 。因此,如果您拥有嵌套在不同集合下的同一文档的多个副本,那么保持所有更新都是您的责任。