node.js - 如何在 Mongoose 中获取对象数组而不是 _id
问题描述
我对猫鼬很陌生。我目前正在使用 Node.js、express.js、GraphQL 和 mongoose 构建后端。我有一个 Drink 模式和 DrinkType 模式。我将 DrinkType 模式定义为“酒精”、“果汁”、“茶”。而且我添加了许多饮料,每种饮料都有 DrinkType 参考。然后,我想引用来自 DrinkType 的所有饮料。这是drinkType 的架构
const drinkTypeSchema = new Schema({
name: {
type: String,
required: true,
},
createdDrinks: [
{
type: Schema.Types.ObjectId,
ref: 'Drink',
},
],
这是饮料的模式
const drinkSchema = new Schema({
name: {
type: String,
required: true,
},
drinkType: {
type: Schema.Types.ObjectId,
ref: 'DrinkType',
},
})
这是饮料分解器。每当创建新饮料时,我都会将其推送到drinkType。
try {
const result = await drink.save()
createdDrink = transformDrink(result)
const drinkType = await DrinkType.findById(args.addDrinkInput.drinkTypeId)
if (!drinkType) {
throw new Error('DrinkType not found.')
}
drinkType.createdDrinks.push(drink)
await drinkType.save()
const drinkLoader = new DataLoader(drinkIds => {
return drinks(drinkIds)
})
const drinks = async drinkIds => {
try {
const drinks = await Drink.find({ _id: { $in: drinkIds } })
return drinks.map(drink => {
return transformDrink(drink)
})
} catch (err) {
throw err
}
}
const transformDrink = drink => {
return {
...drink._doc,
_id: drink.id,
drinkType: drinkType.bind(this, drink.drinkType),
}
}
const drinkType = async drinkTypeId => {
try {
const drinkType = await drinkTypeLoader.load(drinkTypeId.toString())
return {
...drinkType._doc,
_id: drinkType.id,
createdDrinks: () => drinkLoader.loadMany(drinkType._doc.createdDrinks),
}
我希望这个 createdDrinks 部分返回饮料对象数组,但它只返回 _ids 数组。
我一直在阅读 mongoose 文档,似乎使用 ObjectId 是正确的方法。你介意帮助我吗?
先感谢您。
解决方案
推荐阅读
- java - 在漂亮的打印表视图java中排列值
- lua - Roblox,如何只在一个方向上进行补间?
- java - 如何根据选择 JCombobox 项目更改单选按钮(在 Java 中)
- css - 无法从 React App 中的 css 文件访问我的公共文件夹
- python - Selenium 认为它已经点击但它没有
- javascript - 如果变量存在则接收逻辑值
- python - 在 Pandas 中将表示时间段的整数转换为时间
- reactjs - 滚动到 FlatList 中的某个项目 - 不知道确切的宽度
- amazon-web-services - AWS-CDK:有什么方法可以通过输入参数传递 vpc cidr?
- arrays - 在二维数组的范围之外写入