我有一个公司模型,看起来像这样:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const CompanySchema = new Schema(
{
companyName: String,
settings: {
type: {
priceVisible: Boolean,
allowPickupAddressAddition: Boolean,
paymentMethodsAvailable: [
{ type: Schema.Types.ObjectId, ref: "PaymentMethod" },
],
},
},
}
);
const Company = mongoose.model("Company", CompanySchema);
module.exports = Company;
字符串
我想填充存储在paymentMethodsAvailable
数组中的值。下面是相关的控制器代码:
const company = await Company.findOne({ _id: id }).populate([
{
path: "settings",
populate: [{path: "paymentMethodsAvailable"}]
},
]);
型
但这并不像预期的那样工作。我可以看到它可能试图填充设置对象,并在那里失败。有没有一种方法可以让mongoose填充settings.paymentMethodsAvailable
?
3条答案
按热度按时间vhmi4jdf1#
您应该注意
type
密钥:type
是Mongoose模式中的一个特殊属性。当Mongoose在模式中找到一个名为type的嵌套属性时,Mongoose假设它需要定义一个具有给定类型的SchemaType
。type
是settings
的嵌套属性,Mongoose模式应该是:字符串
填充路径为
settings.type.paymentMethodsAvailable
。输出量:
型
type
不是settings
的嵌套属性,Mongoose模式与您的类似:型
填充路径为
settings.paymentMethodsAvailable
。输出量:
型
kse8i1jr2#
试试这个
字符串
您可以在文档中找到更多示例。我使用这一节作为参考https://mongoosejs.com/docs/populate.html#populating-maps
brc7rcf03#
Mongoose提供了清晰的语法,下面的代码可以正常工作
字符串
另外:您可以更进一步,在
settings.paymentMethodsAvailable
中填充特定字段型