问题标签 [mongoose-plugins]
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.
javascript - Mongoose FindOne 在创建后无法直接工作
我正在设置种子数据,目的是仅在不存在的情况下创建记录。
我正在使用https://www.npmjs.com/package/mongoose-find-one-or-create插件仅在记录不存在且不起作用时才创建记录。
我还调试了他们的代码并编写了自己的测试,执行以下操作。
- 创建记录 - 名称 = 'Abc'
- 查找名称 = 'Abc' 的记录
- 如果找到
- 打印找到
- 如果没有找到
- 创建记录 - 名称 = 'Xyz'
我期待看到消息“找到”,但我得到了一条名为“Xyz”的新记录
我觉得这可能是某种异步问题,但我是 mongo 的新手,所以不完全确定。
这是我所有的测试代码,以及插件中的代码。
账户表的方案定义
用于创建新行的种子文件
FindOneOrCreatePlugin 代码
Mongo Shell 中的查询
Web 服务器中的控制台输出
**这是我试图处理的用例**
注意:这是最终用户生成的一组文件的一部分
我试图解决的用例是如果用户不小心将同一个帐户放入了两次。
这段代码本质上是为了在用户意外放入重复代码时进行自我修复,它只是用于填充新应用程序的种子系统。
我确实计划在拥有 1000 种产品的产品表上使用它。
根据@RobertMoskal 的说法,我需要将调用放在回调函数中,但是我会有大量嵌套回调,每个产品1 个。
angularjs - 如何找到猫鼬缩略图“上传”和“u”目录
我正在使用 mongoose-thumbnail 来获取我上传的图像的缩略图,我完全按照 github mongoose-thumbnail 示例中的方式完成了它,并且效果很好,下面是我的代码
我的问题是如何找到“上传”和“u”目录?我在我的目录中的任何地方都找不到它,请帮助。
node.js - mongoose-paginate 按引用文档排序
我想用 mongoose-paginate 和 NodeJS对我的Group
-Model进行排序。name
departure_country
我的组架构:
国家模式:
使用sortBy
mongoose-paginate 的 -option 按国家/地区排序_ids
,我不知道如何告诉它按name
.
node.js - 使用 mongoose 钩子重试保存重复键错误
我想使用 mongoose 中间件挂钩重新尝试保存文档,以防初始保存因重复键错误而失败。用例如下:
我的模型使用自动生成的 slug 进行识别。例如item
, item-2
, item-3
, ..., item-n
。如果item
已经存在,则应在 slug 中添加一个计数器。我无法提前检查“下一个”slug,因为我需要在任何情况下避免冲突。
由于这个逻辑会涉及到几个不同的模型,我想把它隔离成一个猫鼬插件。
这个想法可能吗?例如schema.post('save', handler)
,仅在成功保存时执行。还有其他可以利用的钩子吗?
node.js - 创建一个支持回调和承诺的 Mongoose 插件
我有一个目前只支持回调的 Mongoose 插件,我计划可能将它发布到 npmjs,但我首先想确保它像现有的 Mongoose 函数/方法一样工作,它支持回调和一些内置的 Promise,而你也可以指定自己的 promise 库。
我想知道在我的库中实现相同功能的最佳方法是什么,这意味着我如何同时支持回调和承诺?我找到了一个类似的 SO 线程,但那是蓝鸟特有的,即使我喜欢使用它,我也不想假设它会被使用。(另外,那篇文章看起来可能已经过时了,因为我nodeify
在bluebird api docs中找不到
我在想我可以做一些基本的逻辑来查看是否提供了一个函数作为参数之一,如果是,则执行回调,如果没有,则返回一个承诺......但我确定有一种更简单的方法那。
另外,对于 Promises,当我返回一个 Promise 时,我应该在传递给插件Promise
的对象中使用 thats 吗?Mongoose
意义:
更新
关于最后一个问题,关于返回 Promise 时要引用的 Promise 对象,我尝试使用Mongoose.Promise
如上所述的代码,代码如下:
...导致错误:
所以我猜这不是正确的方法......我认为使用 Mongoose 配置的相同承诺库(自定义或默认......)返回承诺会是一个更好的主意
我试图通过查看findOne函数代码来了解 Mongoose 是如何做到的,但我不太明白如果没有指定回调 PS我使用 Mongoose 4.3.7它如何返回承诺
更新
只是在修补,但这会是一种可以接受的方法吗?或者这是不好的做法
node.js - 在更新后中间件中发现不正确的文档修订号
我有一个 Mongoose 插件,我用它来增加文档修订号 ( __v
),以及创建修订本身。该插件涵盖了 DocumentsDoc.save()
中间件功能,以及 Queryupdate
和findOneAndUpdate
中间件功能。
所以这主要按预期工作。对于文档和查询交互,文档的__v
价值都会增加,并且还会创建修订文档。我坚持的部分与查询中间件功能有关,update
并且findOneAndUpdate
. 即使通过pre事件__v
在文档中更新,post事件中的值似乎也没有看到更新的值。这意味着修订被创建并引用了文档的错误修订号。this.__v
这真是太奇怪了,因为实际上当我在数据库中查看文档时文档__v
确实会更新,但是当我在帖子中控制台登录时..它会在更新之前看到修订号..this.__v
update
对于临时修复,我只是手动增加它,如果它是一个查询 MW 函数:
但显然,这只是一个创可贴,所以如果有一个真正的解决办法,那就太好了
任何的想法?
node.js - 错误:mongoose-auto-increment 尚未初始化
我正在创建一个猫鼬模式,如下所示:
当我尝试运行应用程序时,我收到一条错误消息:
我正在像这样初始化连接:
这是我第一次尝试 mongoose-aut-increment,因此我无法弄清楚我的错误,有人可以帮忙吗?
node.js - 当我“更新”时,Mongoose 操作字段是“查找”,为什么?
我不知道这是否与 Mongoose 本身或 MongoDB 驱动程序有关。
这是交易。我想将创建/更新的字段添加到我的模式中。我知道 Mongoose 可以开箱即用,但我需要使用 Unix Timestamp 而不是 date 对象。为了实现这一点,我添加了我在 Github 上找到的插件(链接到插件),并将字段类型更改为 Number 以存储时间戳。
我在插件源代码中找到了这些行:
如果我做
this.op将等于'find',而不是'update',因此'updated' 字段不会被更改。
我不明白为什么会这样,为什么操作是“查找”而不是“更新”。我试图通过猫鼬源代码搜索,但到目前为止我还没有找到答案。
node.js - mongodb中的自动增量字段
我正在尝试在 mongodb 中创建一个自动增量字段,但出现错误。我是 mongodb 的新手,所以有人可以帮我解决这个错误吗?我的代码是:
得到的错误是
node.js - Mongoose 高级自定义模式对象类型
我在 Mongoose >=4.4 中找不到任何涉及自定义对象(或value-objects )的高级 自定义模式类型的示例。
想象一下,我想使用自定义类型,例如:
接下来,我实现了一个自定义 SchemaType,例如:
我如何保证:
每次从 db (mongoose init ) 中“水合”一个新对象时,我都会有一个 Polygon 实例而不是普通对象。我知道它将使用该
cast
功能。assert(model.polygon instanceof Polygon)
每次我将保存我的模型时,Polygon 属性都应该被编码并存储为一个普通的对象表示(
Polygon.prototype.toObject()
),在这种情况下它是Array
mongodb 中的一个对象。- 如果我使用
model.toObject()
它,它将递归调用model.polygon.toObject()
以获得文档的完整纯对象表示。