猫鼬的用途尚不清楚
Usage of mongoose deep-populate unclear
本文关键字:不清楚 更新时间:2023-09-26
我想使用深度填充插件进行猫鼬查询。当然,我是没有经验的,但是,我不会成功地深入填充一些东西。这是我的方案:
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,并且项目本身包含一个"box"字段,我也希望用实际的box文档替换它(这就是我使用深度填充的原因)。使用上面的查询根本不会给我任何结果。我在项目字段中仍然有ID。如果我运行标准的.populate('item')命令,它会用项目本身替换项目ID,但不幸的是,它不会用项目中的BOX 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();
相关文章:
- 可以'我搞不清楚这个函数是怎么工作的
- 我搞不清楚为什么我的图片会赢't懒散
- CasperJS waitFor*() 的行为非常不清楚
- 不清楚从函数内的 javascript forEach 循环返回
- 不清楚使用Ajax发布数据
- Javascript:函数作为对象构造函数不清楚
- Web 表单的服务器处理部分仍不清楚
- Javascript函数调用语法不清楚
- 数组 - 长度不清楚
- 猫鼬的用途尚不清楚
- 不清楚这个变量设置的作用:var a=!1.
- 可以'我搞不清楚这个JS代码是什么意思
- $.getJSON请求的行为方式我不清楚.不确定如何使用callback=格式化请求
- 不清楚这个javascript代码是如何工作的
- 功能范围理解不清楚
- 在Java脚本全局变量是不清楚的
- React/Flux实现技术不清楚父组件何时需要在子组件上拉字符串
- JavaScript失败,原因尚不清楚
- 正则表达式不清楚
- 多个Nivo滑块-定位不清楚