问题标签 [mongoose-schema]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1204 浏览

node.js - Mongoose,在模式(枚举)中定义一个 OR ref?

但实际上,线程只能有帖子或评论,不能同时有。

所以理想的定义应该像枚举

我如何在 Mongoose 中定义这种东西?

或者做这种事情的正确方法是什么?

0 投票
2 回答
3059 浏览

node.js - 用于多个数据库的 Mongoose 共享模型模式

我正在尝试在我的应用程序中实现多租户。每个租户都将拥有一个单独的数据库。我计划根据子域名使用mongoose.useDb方法为每个客户端动态更改/切换猫鼬数据库连接。当每个数据库都使用更改/切换时,我是否需要重新编译猫鼬模型模式useDb?是否有任何替代方法可以通过在多个数据库连接之间共享模式来完成此任务。任何帮助将不胜感激。在此先感谢。

0 投票
1 回答
208 浏览

node.js - 当我“更新”时,Mongoose 操作字段是“查找”,为什么?

我不知道这是否与 Mongoose 本身或 MongoDB 驱动程序有关。

这是交易。我想将创建/更新的字段添加到我的模式中。我知道 Mongoose 可以开箱即用,但我需要使用 Unix Timestamp 而不是 date 对象。为了实现这一点,我添加了我在 Github 上找到的插件(链接到插件),并将字段类型更改为 Number 以存储时间戳。

我在插件源代码中找到了这些行:

如果我做

this.op将等于'find',而不是'update',因此'updated' 字段不会被更改。

我不明白为什么会这样,为什么操作是“查找”而不是“更新”。我试图通过猫鼬源代码搜索,但到目前为止我还没有找到答案。

0 投票
1 回答
521 浏览

node.js - 填充多个级别不起作用

第一次填充没问题,但第三次总是null。意思是我得到了这样的东西:

0 投票
1 回答
40 浏览

node.js - 不要在某些条件下对模式运行验证

我有一个包含几个必填字段的架构。当我使用published:false道具保存文档时,我不想运行任何验证并按原样保存文档。后来,当 时published:true,我想运行所有的验证。

我认为这会起作用:

但这不起作用,它会返回所需属性的验证错误。

那么如何在某些情况下不运行验证而在其他情况下运行呢?最优雅的方法是什么?

0 投票
0 回答
35 浏览

mongoose - 查询分层参考

我正在寻找对这些数据建模的最佳方法:我有一系列法律。每篇文章可以有 0 个段落(这意味着该段落没有明确编号)或更多(最多 5 个)。

此当前模式是错误的,因为文档只能引用文章或特定段落。我必须能够以两种方式查询文档集合:通过法律或法律段落。

  • 在第一种情况下,我想获取所有涉及该法律 X(或其段落)的文件。
  • 在第二种情况下,我只想要引用该法律段落的文件(忽略其他段落)

第一个也是非常简单的解决方案是在“法律”集合中“平面化”这个分层数据,并为每个法律和段落提供不同的文档:

集合应该是这样的:

我不喜欢这样,因为它需要在业务层进行大量的额外工作才能完成逐篇查询(正如我所说,我需要引用“article1”但也引用“article1 - 第1段”的文档)

编辑:我发现这个问题 Mongoose Schema for hierarchy data like a folder > subfolder > file 但我不清楚如果使用路径我很容易检索到我所说的参考(参考章节及其所有段落或单个段落)

0 投票
1 回答
1634 浏览

node.js - 有条件地跳过猫鼬钩子函数

我有一个预保存挂钩来加密模式password字段User,例如:

通过这种方式,每次User创建或更新时,我都会在我的数据库中加密密码字符串。

现在我有一个User带有加密密码的旧数据的 JSON 文件。我想使用这个User模型将 JSON 文件导入我的数据库。

如何避免预先保存钩子再次加密密码?

0 投票
2 回答
660 浏览

javascript - 将对象引用存储到 Mongoose 和 Mean JS

我有一个文章架构和一个标签架构。我正在尝试将 Tag 对象引用的数组保存到文章。 这是我的文章架构:

和标签架构:

在前端我有我的控制器。

在后端,我有我的文章控制器:

当我尝试在文章中保存我的标签数组时出现错误: Cast to Array failed for value "[object Object]" at path "tags" 我环顾四周并尝试了多种方法,但仍然无法将其存储在数据库中。前端和后端的所有路由都设置正确。

0 投票
5 回答
15714 浏览

javascript - 防止 Mongoose 中的重复记录

我对 MongoDb / Mongoose 比较陌生,更习惯于 SQL Server 或 Oracle。

我有一个相当简单的事件模式。

我正在查看Mongoose Indexes,它显示了两种方法,我使用了字段定义。

我还有一个非常简单的 API,它接受一个 POST 并在这个集合上调用 create 来插入记录。

我编写了一个测试,检查是否不应该插入具有相同 pkey 的记录,并且 unique:true 正在运行。我已经有一组事件,我读入了一个数组,所以我只是再次发布这些事件中的第一个,看看会发生什么,我预计 mongo DB 会抛出 E11000 重复键错误,但这并没有发生。

测试失败,没有错误并且插入了重复记录。

当我查看集合时,我可以看到两条记录,它们都具有相同的 pkey(原始记录和我为测试发布的副本)。我确实注意到第二条记录的创建日期与第一条记录相同,但修改日期较晚。

(mongo是不是希望我用最新的修改版本记录???,url不一样,id也不一样)

我认为 unique: true 字段定义告诉 mongo db 这是你想要的,mongo 在保存时为你强制执行,或者我只是误解了一些东西......

在 SQL 术语中,您创建一个可用于 URL 查找的键,但您可以构建一个唯一的复合索引,以防止重复插入。我需要能够定义事件中的哪些字段使记录唯一,因为在表单数据 POST 上,表单的提交者没有下一个可用的 _id 值,但使用 _id(由“mongoose-auto-increment”完成) 以便应用程序其他部分的 URL 使用是干净的,例如

而不是一团糟的复合值,比如

我正要开始编码所以现在我只是针对这个单个字符串编写了一个简单的测试,但是真正的模式有更多的字段,并且将使用它们的组合来实现唯一性,我真的很想得到最初的在我开始添加更多测试、更多字段和更多代码之前测试工作。

我应该做些什么来确保第二条记录实际上没有被插入?

0 投票
1 回答
1276 浏览

mongoose - 猫鼬模式未触发预删除事件?

这不是开枪!不知道为什么,非常感谢这里的帮助。