Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 为什么mongoose在mongodb';它的好处应该是';什么是无模式?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 为什么mongoose在mongodb';它的好处应该是';什么是无模式?

Node.js 为什么mongoose在mongodb';它的好处应该是';什么是无模式?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我是mongodb的超级新手。我正在使用mongoose从node.js访问mongodb,并且知道如何让它正常工作,但我不明白它为什么会这样工作 最重要的是,我不明白为什么mongoose有“模式”,而mongodb的一个突出特性是它没有模式。有人能启发我吗?谢谢。没有模式的数据是无用的。如果您从MongoDB获得一份文档,您将如何处理它?读一些字段?您需要知道这些字段的名称、类型和含义。这是一个模式 当人们说MongoDB“没有模式”时,他们的真正意思是它没有像SQL数据库那样实施模式。Mo

我是mongodb的超级新手。我正在使用mongoose从node.js访问mongodb,并且知道如何让它正常工作,但我不明白它为什么会这样工作


最重要的是,我不明白为什么mongoose有“模式”,而mongodb的一个突出特性是它没有模式。有人能启发我吗?谢谢。

没有模式的数据是无用的。如果您从MongoDB获得一份文档,您将如何处理它?读一些字段?您需要知道这些字段的名称、类型和含义。这是一个模式


当人们说MongoDB“没有模式”时,他们的真正意思是它没有像SQL数据库那样实施模式。MongoDB将模式问题提升到应用程序级别,您可以更灵活地处理它们。例如,为了向文档中添加一个新字段,您不需要对集合中可能存在的数百万条条目执行全部或全部更改。您只需将该字段添加到您的ODM(Mongoose)模式中,就完成了。

我认为这是默认模式的一种情况,但是您可以在应用程序代码中动态添加字段,而无需更改整个表。一个例子是一个巨大的产品表,在SQL中添加一个令人讨厌且缓慢的字段,在MongoDB中,只需将其添加到客户机模型中……MongoDB并不是没有模式的。它有一个灵活的模式——这是一个很大的区别。这是一个品味的问题,Mongoose让你有一个带有验证的类型化模式,如果你使用驱动程序,你不会得到它,你将不得不自己使用它。另一方面,Mongoose层将在一定程度上影响原始性能,因为它会对原始驱动程序进行一些内务处理,这需要额外的时间。我目前在node/mongodb/Mongoose中工作,但在C#、LINQ和SQL Server中也有深厚的根基。Mongodb确实有一个模式,但它的结构非常松散,因为它只是对象、数组和JavaScript类型,还有一些其他类型,如ObjectId、Date等。这迫使您根据模式在代码中管理事情。Mongoose让您可以轻松定义数据结构,同时简化mongodb交互。我已经尝试过只使用mongodb direct,mongoose更方便,因为您不必发明自己的方式来实施模式。与原始驱动程序相比,性能较差是mongoose唯一的负面后果吗?是否还有其他陷阱或陷阱,或者它是一个值得在几乎所有用例中实现的工具?不完全正确。有些实时应用程序可以依赖于动态创建的字段。向Mongoose模型添加字段意味着一个新的部署过程。有些ODM不需要固定的模式定义,比如Mongorito。听说过自定义字段吗?假设您希望您的客户能够定义自己的模式,您希望将其存储在自己的集合中,而无需为每个客户提供开发人员更改代码。这是一个完美的无模式设计用例。@TimHardy你说“定义他们自己的模式”,但又称之为“无模式”——看到矛盾了吗?我并没有说“没有静态模式的数据是无用的”。@TimHardy这不是读取数据的麻烦吗?也许阅读时需要有条件的代码才能知道特定文档上是否存在特定字段。在我的场景中,模式存储在MongoDb中——也许最好将其称为动态模式。