[英]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.