Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用猫鼬ORM的致命原因是什么?_Node.js_Mongodb_Mongoose_Nosql - Fatal编程技术网

Node.js 使用猫鼬ORM的致命原因是什么?

Node.js 使用猫鼬ORM的致命原因是什么?,node.js,mongodb,mongoose,nosql,Node.js,Mongodb,Mongoose,Nosql,我一直在一个新项目中使用它,但这也是我第一次使用MongoDB。定义模式似乎没有必要,因为我认为mongo的优势在于它不需要定义的模式。无论模式如何,我都不能动态保存对象吗?那我为什么要这么做?此外,还缺少文档,这使得我可以在mongo shell中轻松完成的一些事情比它们应该做的更难 事先知道一个已定义的模式是很方便的,因为这样你就可以做出假设,否则你可能做不到 例如,如果我有一个Post模式,那么我可以假设它有一个body字段,并将其用作字符串,而不检查其存在性 当然,即使在我定义良好的模型

我一直在一个新项目中使用它,但这也是我第一次使用MongoDB。定义模式似乎没有必要,因为我认为mongo的优势在于它不需要定义的模式。无论模式如何,我都不能动态保存对象吗?那我为什么要这么做?此外,还缺少文档,这使得我可以在mongo shell中轻松完成的一些事情比它们应该做的更难

事先知道一个已定义的模式是很方便的,因为这样你就可以做出假设,否则你可能做不到

例如,如果我有一个
Post
模式,那么我可以假设它有一个
body
字段,并将其用作
字符串,而不检查其存在性

当然,即使在我定义良好的模型上,我也可以在其中包含相当于无模式文档的内容,例如

mongoose.model('Post', new Schema({
    body: String,
    meta: {}
}));

然后我就可以随心所欲地将随机数据添加到myPost.meta。它在已定义模式和无模式之间提供了一个很好的平衡。

我使用了Mongoose,我必须说我完全同意预先定义模式严重限制了MongoDB。Mongoose背后的理念是使其安全且易于维护,但它并不真正吸引基于文档的数据库。

你真的可以选择任何一种方式。在许多其他语言中有许多流行的MongoDB映射程序:Morphia for Java、Doctrine for PHP、Mongoid/Mongomapper for Ruby等等

尽管MongoDB是“无模式的”,但它不是“无模式的”。关于知道从数据库中可以得到什么,有一些话要说

当然,构建一个临时对象并保存它也有一些优雅之处。现在,node.js非常新,最好使用您喜欢的东西

此外,还缺少文档,这使得我可以在mongo shell中轻松完成的一些事情比它们应该做的更难


猫鼬仍然是一个社区项目,它相对较新。如果缺少文档或需要编写文档,我相信开发团队会喜欢这些帮助。您很可能可以与他们联系。

Mongoose for MongoDB最好的一点是,您可以对插入/更新的数据进行内置自动验证。Mongoose还允许您预先定义要发生的事件,例如,在保存文档之前。这是非常强大的,因为它整合了您必须编写的代码,并将代码放在文档逻辑旁边,而不是应用程序逻辑中

查看并验证一些示例。
Github上的alexyoung/Nodepad在中有一些很好的例子。

在调用MongoDB无模式时,它实际上是指数据库本身不需要模式,也不需要模式迁移。这并不意味着您的数据总是非结构化的-在大多数情况下,您希望数据是结构化的,而且通常是结构化的。在某些情况下,您确实希望迁移数据。@nbro-编辑此问题时没有任何价值,只是为了添加换行符,特别是1)它已经4年了,2)根据今天的StackOverflow指导方针,这个问题现在已经脱离主题,因为它是基于意见的。您甚至没有花时间编辑一个新项目的序言,第一次使用MongoDB(这完全是多余的)。@DavidMakogon IMO,换行符通常有助于使问题和答案更具可读性,如果放得恰当的话。它也可能是10年前的,如果我认为它需要编辑以使其更具可读性,我会一直这样做,只要他们允许我这样做,我有时间这样做。你应该感谢我,而不是声称,但不管怎样,人们都是如此忘恩负义。我在《猫鼬》即将发布的时候查看了它,这篇文章和op的文章指出的是——你从来没有真正读过很好的文档。Mongoose始终具有字段的混合模式类型,允许您临时保存的任何和所有数据都可用。事实上,如果你愿意的话,你可以让你的收藏表现得如此时尚,但这确实严重阻碍了你的应用。如果您需要检查数据是否一直存在,那么您实际上没有任何结构,这会导致错误、问题和数据不一致。