【发布时间】:2021-05-11 21:35:56
【问题描述】:
我有一个带有一系列订单商品的订单对象。其中一些项目可能尚未创建,因此我想更新这些项目,然后将所有项目添加到订单中。以下是我在 GraphQL 解析器中尝试执行的操作,但我无法将 then 链接到 map。
updateOrder: async (_, { order: { id, items, ...order } }, { req }) => {
const updatedOrder = items
.map(async ({ id, ...item }) => {
await OrderItem.findByIdAndUpdate(
id,
{ ...item },
{ new: true, upsert: true, setDefaultsOnInsert: true }
);
})
.then(
async (res) =>
await Order.findByIdAndUpdate(
id,
{ items: res, ...order },
{ new: true }
)
);
return updatedOrder;
}
如果单独使用,地图的结果不会解析。
const updatedItems = items
.map(async ({ id, ...item }) => {
await OrderItem.findByIdAndUpdate(
id,
{ ...item },
{ new: true, upsert: true, setDefaultsOnInsert: true }
);
})
const updatedOrder = await Order.findByIdAndUpdate(
id,
{ items: updatedItems, ...order },
{ new: true }
)
);
我认为 bulkWrite 是我需要的,但我不知道如何从 bulkWrite 返回文档而不是修改文档的计数。如果没有新的/更新的文档,我不知道如何将它们推送到订单中。
【问题讨论】:
-
直到今天才读到
upsert这个词。多么奇怪。 -
promise.all,使用搜索
标签: javascript node.js mongodb mongoose graphql