Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongoose-填充子模式子数组_Mongoose_Populate - Fatal编程技术网

mongoose-填充子模式子数组

mongoose-填充子模式子数组,mongoose,populate,Mongoose,Populate,我正在尝试填充子架构字段 一个项目包含多个ProjectFilters。 每个ProjectFilter引用一个FilterValue。 FilterValue包含在一个且仅包含一个筛选器中 项目模式 const ProjectSchema=新架构{ 标题:字符串, 筛选器:[ProjectFilter.schema], }, { 时间戳:对, toJSON:{ 虚拟人:是的, }, }; ProjectFilterSchema const ProjectFilterSchema=新架构{ fi

我正在尝试填充子架构字段

一个项目包含多个ProjectFilters。 每个ProjectFilter引用一个FilterValue。 FilterValue包含在一个且仅包含一个筛选器中

项目模式

const ProjectSchema=新架构{ 标题:字符串, 筛选器:[ProjectFilter.schema], }, { 时间戳:对, toJSON:{ 虚拟人:是的, }, }; ProjectFilterSchema

const ProjectFilterSchema=新架构{ filterValue:{ 类型:mongoose.Schema.Types.ObjectId, ref:'FilterValue', }, 伊斯曼:{ 类型:布尔型, 默认值:false, }, }, { toJSON:{ 虚拟人:是的, }, }; 过滤模式

const FilterSchema=新架构{ 标签:字符串, 值:[FilterValue.schema], }, { 时间戳:对, toJSON:{ 虚拟的:真的 }, }; FilterValueSchema

const FilterValueSchema=新架构{ 标签:字符串, 颜色:字符串, }, { toJSON:{ 虚拟人:是的, }, }; 此查询不起作用。filterValue为空:

让query=Project.findByIdreq.params.projectId,{u id:0,过滤器:1}; 填充'filters.filterValue'; 我已尝试使用虚拟填充:

ProjectFilterSchema.virtual'usedValue'{ ref:'过滤器', localField:'filterValue', foreignField:'values.\u id', justOne:没错, };
但这将返回整个筛选文档,而不仅仅是所需的FilterValue。

为了填充子文档,首先需要明确定义ID引用的文档集合。 这样,猫鼬就知道要查询哪个集合

在Mongoose4中,您可以跨多个级别填充文档

//ES6 syntax
import mongoose from 'mongoose';

const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;

const FilterSchema = new Schema({
   label: String,
   filtervalues: [FilterValueSchema],
}, { collection: 'filter' })

const FilterValueSchema = new Schema({
   label: String,
   color: String,
}, { collection: 'filtervalue' })

const ProjectFilterSchema = new Schema({
   filterValue: {
   type: ObjectId,
   ref: 'filtervalue',
}, { collection: 'projectfilter' })

mongoose.model('filters', ProjectFilterSchema);
mongoose.model('projectfilter', ProjectFilterSchema);
mongoose.model('filtervalue', FilterValueSchema);

Project.findById(req.params.projectId, { _id: 0 })
  .populate('filters.filter.filterValue').