如何从静态函数内部访问Mongoose模型

时间:2018-06-09 01:18:30

标签: javascript mongodb mongoose

我尝试定义名为statics的{​​{1}}函数,该函数采用convertFromCartItems类型的模型数组,创建一个CartItem类型的模型数组,然后使用MongoDB OrderItem将它们插入到一个操作中。我目前从insertMany()创建Order的功能(CartOrderItem分别指向的父模型)如下所示:

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()

然而在Mongoose(实际上是MongoDB)models.Order.convertFromCart(cart, shipping, (order) => { // Do something with the newly created 'Order' }) 是在模型而不是实例上定义的,所以我想做的是这样的:

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尚不存在。 Mongoose使用一些OrderItemSchema技巧让我通过调用this来创建模型的实例,但this()this.insertMany()不起作用(因为this().insertMany()在模型而不是实例)。当前的workarround是返回数组,然后调用insertMany()以获取此函数之外的项目。关于如何使这个功能插入自身的任何想法?

如果有必要了解我之后的内容,那么这两个模型的基本概述。我有一个代表购物车中商品的模型(models.OrderItem.insertMany()),我试图获取这些商品的数组并按完成的顺序创建一系列的行(CartItem)(这类似于Double-entry bookkeeping system,允许已完成的订单在收到订单时获得数据的快照,而OrderItem可以指向产品的当前定义,例如产品&#39}名称和价格)。

0 个答案:

没有答案