javascript - 如何从静态函数内部访问 Mongoose 模型
问题描述
我正在尝试定义一个statics
名为的函数,该函数convertFromCartItems
接受一个类型的模型CartItem
数组,创建一个类型的模型数组OrderItem
,然后使用 MongoDB 将它们插入到单个操作中insertMany()
。Order
我当前用于从(和分别指向Cart
的父模型)创建的函数如下所示:OrderItem
CartItem
schema.statics.convertFromCart = function (cart, shipping, then, unless) {
let order = new this()
order._cart = cart
order.firstName = shipping.firstName
order.lastName = shipping.lastName
order.email = shipping.email
order.address = shipping.address
order.addressCity = shipping.addressCity
order.addressPostalCode = shipping.addressPostalCode
order.addressRegionCode = shipping.addressRegionCode
order.addressCountryCode = shipping.addressCountryCode
order.save((err, thing) => {
if (!err && thing) {
then(thing)
} else {
unless(err)
}
})
}
这个函数.save()
自己调用所以调用它我有一个类似于这样的行:
models.Order.convertFromCart(cart, shipping, (order) => {
// Do something with the newly created 'Order'
})
但是在 Mongoose(实际上是 MongoDB)insertMany()
中是在模型而不是实例上定义的,所以我想要做的是这样的:
schema.statics.convertFromCartItems = function (order, items, then unless) {
let orderItems = []
items.forEach((item) => {
let orderItem = this()
orderItem._item = item
orderItem._order = order
orderItem.quantity = item.quantity
orderItem.subscribed = item.subscribed
orderItem.name = item._item._product.name
orderItem.variation = item._item.variation
orderItem.price = item._item.price
orderItem.image = item._item._product.image
orderItem.created = item.created
orderItem.updated = item.update
orderItems.push(orderItem)
})
// code I want to use
OrderItemSchema.insertMany(orderItems, funciton (err, things) {
if (!err && things) {
then(things)
} else {
unless(err)
}
})
}
然而,虽然在这个statics.convertFromCartItems
函数中,OrderItemSchema
还不存在。Mongoose 使用了一些this
技巧让我通过调用this()
但this.insertMany()
或this().insertMany()
不工作来创建模型的实例(就像insertMany()
在模型上而不是实例上一样)。当前的解决方法是返回数组,然后调用models.OrderItem.insertMany()
此函数之外的项目。关于如何让这个函数插入自己的任何想法?
如果它有助于理解我所追求的是这两个模型的基本概述。我有一个模型代表购物车中的一个项目CartItem
(完成订单以获取收到订单时的数据快照,同时可以指向当前定义的产品名称和价格)。 OrderItem
CartItem
解决方案
推荐阅读
- kotlin - 对象模块中的匕首@Singleton
- crash - 仅在 GDB 中调用的纯虚方法
- java - 删除由@JsonUnwrapped - RestController 导致的 json 中的重复键
- api - API 设计 - 新端点与新微服务
- tensorflow - `nvidia-smi` 之间的内存使用指标有什么区别`nvidia-smi dmon`
- c# - 使用斑马打印机 [ZPL] 在连续标签上打印带有页眉、正文和页脚的票据
- c# - 在 C# 中计算表的总记录数
- c# - ASP.NET Core API 错误:“路由超过允许的最大段数 28”
- flutter - 屏幕加载时地图不会绘制在用户位置上
- c# - Unity 3d,平滑提速(自动)