尽管填充了路径,猫鼬填充返回未定义

问题描述

我有以下猫鼬模式:

// server/models/Order.js

const { connection,model,Schema } = require('mongoose');

const itemSchema = new Schema({
    product: { type: Schema.Types.ObjectId,ref: 'Product',required: true },quantity: { type: Number,purchasePrice: {
        type: Schema.Types.Decimal128,get: Number,required: true,validate: {
            validator: function (value) {
                return !this.populated('product') || +value === this.product.price;
            },}
    },});

const schema = new Schema({
    // ...
    items: [itemSchema],// ...
});

module.exports = model('Order',schema);

我的服务器创建一个新订单,填充它,然后尝试保存它:

// server/routers/order.js

const Order = require('../models/Order');

const order = new Order({ ... });
await order.populate('items.product').execPopulate();
const { _id } = await order.save();

调用验证函数。调试器显示 this.product 指的是有效文档,但 this.populated('product') 返回 undefined,因此不会评估比较 +value === this.product.price

这是 Mongoose 中的错误还是出于某种原因应该这样做?

解决方法

是的,我认为这是一个错误。 我也发现了这个。

const trackSchema=new Schema({
  song:{
    type:Schema.Types.ObjectId,ref:"Attachments",index:true
  },played:{
   type:Number,default:0
  }
});
const playlistSchema=const plSchema=new Schema({
  name:String,tracks:[trackSchema]
});

填充前:

playlist.tracks.forEach((track)=>{
   console.log('track.song: ',track.song);
   //this prints ObjectId
});

填充后:

await playlist.populate('tracks.song').execPopulate();
playlist.tracks.forEach((track)=>{
   console.log('track.song: ',track.song);
   //this prints undefined
});

修改为:

await playlist.populate('tracks').execPopulate();
playlist.tracks.forEach((track)=>{
   console.log('track.song: ',track.song);
   //this prints undefined
});

仍未定义?‍♂️

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...