代码之家  ›  专栏  ›  技术社区  ›  HRK44

Mongoose虚拟返回空值

  •  0
  • HRK44  · 技术社区  · 6 年前

    我有个人模式:

    const person = new mongoose.Schema({
        name: String,
        birthday: Date,
        sex: String
    },
    {
        toObject: { virtuals: true },
        toJSON: { virtuals: true }
    });
    
    person.virtual('tasks', {
        ref: 'task',
        localField: '_id',
        foreignField: 'person'
    });
    
    export default mongoose.model('person', person);
    

    还有一个任务 person 领域:

    const schema = new mongoose.Schema({
    
        person: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'person',
            required: true
        },
    
        name: String
    });
    
    export default mongoose.model('task', schema);
    

    我的API检索一个人:

    api.get('/person/:id', async (req, res) => {
        let personID = req.params.id;
    
        if (personID) {
            let person = await Person.findById(personID);
    
            if (person)
                res.json(person);
            else
                res.status(404).end();
        }
        else {
            res.status(400).end();
        }
    });
    

    当我为一个人查询API时, tasks 总是 null 有什么想法吗?

    谢谢

    更新

    我尝试过:

    let person = await Person.findById(personID).populate('tasks').exec();
    

    它还在返回 无效的 .

    2 回复  |  直到 6 年前
        1
  •  2
  •   IftekharDani    6 年前

    使用 populate 在你的询问中。

    你能查一下下面的问题吗

    let person = await Person.findOne({ _id: personID })
      .populate('tasks')
      .exec((error, personData)
        => personData);
    

    let person = await Person.findById(personID)
      .populate('tasks')
      .exec((error, personData) => personData);
    

    参考链接: http://thecodebarbarian.com/mongoose-virtual-populate

        2
  •  0
  •   HRK44    6 年前

    好吧,我发现了这个问题,我在设置虚拟机之前注册了模型(在一些包装器中,我写了mongoose.schema)。