簡體   English   中英

貓鼬深人群的用法尚不清楚

[英]Usage of mongoose deep-populate unclear

我想對貓鼬查詢使用深度填充插件。 最肯定的是,我是沒有經驗的人,但是,我不能成功地深度填充某些東西。 這是我的計划:

 var mongoose = require('mongoose'); var MMAnswersSchema = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, item: { type: mongoose.Schema.Types.ObjectId, ref: 'MMItem'}, answer: [ { skalaAnswer: Number, freitextAnswer: String, multipleChoiceAnswer: String, answered_at: { type: Date, required: true, default: Date.now } } ], last_answered: { type: Date, required: true, default: Date.now } }); MMAnswersSchema.pre('save', function(next) { this.last_answered = Date.now; next(); }); mongoose.model('MMAnswer', MMAnswersSchema); var deepPopulate = require('mongoose-deep-populate')(mongoose); MMAnswersSchema.plugin(deepPopulate); 

我是否將deepPopulate需要的東西放在正確的地方?

我現在使用此路線來獲取我的東西:

 // Alle Antworten des aktuellen Users laden // Verwendet von der Historie .get('/mm-answers/:user_id/get-all-answers', function (req, res, next) { Answer.find({user:req.params.user_id}, function (err, answer) { if(err){ return next(err); } res.json(answer); }) .deepPopulate('item') }) 

我希望它用實際項目替換id,並且項目本身包含一個'ofBox'字段,我也希望將其替換為實際的box文檔(這就是為什么我使用深度填充)。 使用上面的查詢根本不會給我任何結果。 我在項目字段中仍然有ID。 如果我運行標准的.populate('item')命令,它將使用項目本身替換項目ID,但不幸的是,它不會替換項目內部的ofBox ID。 (這就是為什么我需要人口稠密的原因)。

有人可以幫我弄清楚嗎? 我想我在正確導入/注冊插件時犯了一個錯誤...-.-

您需要在執行查詢之前放置deepPopulate調用,如下所示:

  // Alle Antworten des aktuellen Users laden // Verwendet von der Historie .get('/mm-answers/:user_id/get-all-answers', function (req, res, next) { Answer.find({ user: req.params.user_id }).deepPopulate('item').exec(function (err, answer) { if (err) { return next(err); } res.json(answer); }); }); 

在模型中,您只需要添加添加插件時要填充的字段:

 const mongoose = require('mongoose');
 const deepPopulate = require('mongoose-deep-populate')(mongoose);

    const MMAnswersSchema = new mongoose.Schema({
      user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
      item: { type: mongoose.Schema.Types.ObjectId, ref: 'MMItem'},
      answer: [
        {
          skalaAnswer: Number,
          freitextAnswer: String,
          multipleChoiceAnswer: String,
          answered_at: { type: Date, required: true, default: Date.now }
        }
      ],
      last_answered: { type: Date, required: true, default: Date.now }
    });

    MMAnswersSchema.pre('save', function(next) {
      this.last_answered = Date.now;

      next();
    });



    MMAnswersSchema.plugin(deepPopulate, {
    populate: {
        user: {
            select:'_id name lastName'
        },
        item: {
            select:'_id name'
        },

        });
    const MMAnswers = mongoose.model('answers',MMAnswersSchema);
    module.exports = { MMAnswers };

最后,當您需要使用深度填充時,只需添加您想填充的任何字段

await MMAnswers.findOne({your search}).deepPopulate('user').exec();

要么

await MMAnswers.findOne({your search}).deepPopulate('user item').exec();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM