我正在建立一个问题数据库。我有三种模式,用户,问题和答复(答案)。我的问题从我只想查询用户尚未回答的问题开始。但是当我运行此查询时,我得到一个带有空回复数组的问题。我应该以某种方式填充它吗?这是我得到的地方:
查询:
let getQuestions = (req, res)=>{
Question.aggregate([
{
$match: {isGlobal: true}
},
{
$lookup: {
from: 'Reply',
localField: '_id',
foreignField: 'questionID',
as: 'replies'
}
},
// {
// $match: {}
// }
]).then(foundQuestions=> console.log(foundQuestions))
};
用户架构(简体):
const mongoose = require('mongoose');
const userSchema = mongoose.Schema({
firstName: String,
lastName: String,
email: String,
questionReplies: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Reply'
}
],
}, {timestamps: true});
module.exports = mongoose.model('User', userSchema);
问题模式:
const mongoose = require('mongoose');
const questionSchema = mongoose.Schema({
title: String,
description: String,
isGlobal: Boolean,
options: [
{
number: Number,
title: String,
}
]
}, {timestamps: true});
module.exports = mongoose.model('Question', questionSchema);
回复架构:
const mongoose = require('mongoose');
const replySchema = mongoose.Schema({
questionID: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Question',
required: true
},
email: {type: String, required: true},
answerID: {type: String, required: true},
number: Number,
title: String,
}, {timestamps: true});
module.exports = mongoose.model('Reply', replySchema);
我的回复集合中包含以下文档:
"questionID" : ObjectId("5c6f6867cbff9c2a9004eb6d")
我有一个与此ID有关的问题:
"_id" : ObjectId("5c6f6867cbff9c2a9004eb6d"),
(也欢迎任何有关改进数据库设计的意见)。
答案 0 :(得分:0)
尝试以下方法:
let getQuestions = (req, res)=>{
Question.aggregate([
{
$match: {isGlobal: true}
},
{
$lookup: {
from: 'Reply',
localField: '_id',
foreignField: 'questionID',
as: 'replies'
}
},
{
$match: { "replies": { $eq: [] } }
}
]).then(foundQuestions=> console.log(foundQuestions))
};
因此您将收到没有任何答复的问题。
答案 1 :(得分:0)
我解决了我的问题,并在此处发布以供将来参考。
from
中使用的$lookup
字段是指mongodb创建的集合名称,而不是猫鼬中使用的型号名称。因此正确的查询是:
$lookup: {
from: 'replies',
localField: '_id',
foreignField: 'questionID',
as: 'replies'
}
然后我添加了
{
$match: { "replies": { $eq: [] } }
}
仅查找没有答案的问题。