英文:
Is there a way to autopopulate a mongoose field with a string?
问题
以下是您提供的代码的翻译部分:
我有一个Item
模式,其中有一个存储一些id
的类别数组:
const schema = new Schema<Item>(
...
categories: [
{
type: Schema.Types.ObjectId,
ref: 'Category',
autopopulate: { select: 'name' }
}
]
...
)
类别:
const schema = new Schema<Category>({
slug: {
type: String,
required: true,
unique: true,
index: true,
},
name:{
type: String,
required:true,
}
});
我目前正在使用mongoose-autopopulate
包。
是否有一种方法可以在查询Item
模式时用适当的name
替换ids
(无论是否使用mongoose-autopopulate
)?
英文:
I have a Item
schema with an array of categories where I store some id
s :
const schema = new Schema<Item>(
...
categories:[
{
type: Schema.Types.ObjectId,
ref: 'Category',
autopopulate: { select:'name'}
}
]
...
)
Category:
const schema = new Schema<Category>({
slug: {
type: String,
required: true,
unique: true,
index: true,
},
name:{
type: String,
required:true,
}
});
and I am using the mongoose-autopopulate
package at the moment.
Is there a way to replace the ids
in the Item
schema with the appropriate name
when queried (with or without mongoose-autopopulate
) ?
答案1
得分: 1
我认为你想要使用.populate
并传入一个对象。我在mongoose
文档中找到了这个例子:
// 下面的第二个`populate()`调用会覆盖第一个,因为它们都在'fans'字段上执行populate。
Story.
find().
populate({ path: 'fans', select: 'name' }).
populate({ path: 'fans', select: 'email' });
// 上述代码等同于:
Story.find().populate({ path: 'fans', select: 'email' });
在你的情况下,我认为你需要使用.populate({ path: 'categories', select: 'name' });
。
英文:
I think what you want is to use .populate
with an object passed in. I found this in the mongoose
documentation
// The 2nd `populate()` call below overwrites the first because they
// both populate 'fans'.
Story.
find().
populate({ path: 'fans', select: 'name' }).
populate({ path: 'fans', select: 'email' });
// The above is equivalent to:
Story.find().populate({ path: 'fans', select: 'email' });
https://mongoosejs.com/docs/populate.html
In your case I think you need to use .populate({ path: 'categories', select: 'name' });
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论