我在玩猫鼬的快速入门指南。
http://mongoosejs.com/docs/index.html
我假设当我使用架构中未定义的字段保存文档时,它会引发错误。相反,它在集合中创建了一个新文档,但没有该字段。(注意:我意识到mongodb本身是“无模式的”,因此集合中的每个文档可以完全不同。)
两个问题
mongoose
如何处理添加包含而不是架构的部分的字段的文档?看起来它只是忽略了它们,如果没有字段映射,就会使用ObjectId创建一个空文档。mongoose
警告您呢?(问题是--我相信--很简单,所以我没有添加代码,但如果有人请求,我肯定会添加代码。)
谢谢。
发布于 2013-05-13 00:14:17
Q:猫鼬如何处理添加不属于模式的字段的文档?
严格选项(默认情况下启用)确保传递给我们的模型构造函数的值(在我们的架构中没有指定)不会保存到db。- 猫鼬博士
问:即使文档成功保存,如果没有添加文档的特定字段,如何让猫鼬警告您?
严格的选项也可以设置为“抛出”,这将导致产生错误,而不是删除坏数据。- 猫鼬博士
...but如果您绝对需要保存模式中没有的键,那么您必须自己来处理。我能想到的两种方法是:
1.要保存不在架构中的键,可以在或具体更新上将strict
设置为false。然后,您需要编写一些验证:(a)文档中的值符合您的标准;(b)保存在数据库中的文档与您发送的文档相匹配。
2. --您可以看到混合模式类型是否可以满足您的需要,而不是禁用strict
附带的验证。(向下滚动到该链接上的“使用说明”,因为“混合”文档的链接似乎暂时中断了。)
发布于 2013-05-13 00:13:29
Mongoose允许您添加执行有用功能的“验证器”和“预”中间件。例如,可以在架构中指定required
属性,以指示必须设置特定属性。您还可以指定一个validator
,如果关联的属性不符合您的规范,就可以手工处理它来抛出一个错误。您还可以设置一个Mongoose "pre" validator
,如果它找到超出架构的字段,它将检查文档并抛出一个错误。通过让中间件调用next()
(或不调用),您可以控制是否继续保存文档(或不保存文档)。
堆栈溢出上的这个问题/答复可以帮助找出对象是否有属性。
https://stackoverflow.com/questions/16509828
复制相似问题