Получить номер счета от mongoDB

Я создаю веб-сайт вопросов и ответов, используя mango и express. Итак, есть две схемы для вопросов и ответов.

Моя схема вопросов и ответов похожа на эту,

const questionSchema = mongoose.Schema({
_id : mongoose.Schema.Types.ObjectId,
user: { type:mongoose.Schema.Types.ObjectId, ref: 'User', required: true},
title: {type: String , required:true},
question: {type: String , required:true},
tags: {type: Array , required: true},
time : { type : Date, default: Date.now },
vote: {type: Number, default: 0},
views: {type: Number, default: 0}     });


const answerSchema = mongoose.Schema({
_id : mongoose.Schema.Types.ObjectId,
user: { type:mongoose.Schema.Types.ObjectId, ref: 'User', required: true},
question:{ type:mongoose.Schema.Types.ObjectId, ref: 'Question', required: true},
comment: [{type: mongoose.Schema.Types.ObjectId, ref: 'Comment', default: null }],
answer: {type: String, required: true},
vote: {type: Number , default: 0},
time : { type : Date, default: Date.now }   });

Здесь есть много ответов, связанных с одним вопросом. Моя домашняя страница содержит все вопросы для предварительного просмотра. Как подсчитать количество ответов, относящихся к каждому вопросу?


person Janaka Edirisinghe    schedule 31.01.2020    source источник
comment
Вы хотели запросить question коллекцию с именем вопроса и получить количество всех ответов?   -  person whoami - fakeFaceTrueSoul    schedule 01.02.2020
comment
да, я хочу получить количество вопросов и ответов на каждый вопрос   -  person Janaka Edirisinghe    schedule 01.02.2020
comment
ты попробовал мой ответ?   -  person whoami - fakeFaceTrueSoul    schedule 01.02.2020
comment
да, но count всегда получает 0. Я думаю, что проблема в именах localField и foreignField связана с моей схемой.   -  person Janaka Edirisinghe    schedule 01.02.2020
comment
хорошо, localField - "_id", я обновлю ответ ..   -  person whoami - fakeFaceTrueSoul    schedule 01.02.2020
comment
спасибо @whoami. Это работа после того, как я изменил с = Ответ на от = ответы. Это работает. ‹3   -  person Janaka Edirisinghe    schedule 01.02.2020


Ответы (1)


Поскольку ваш questionSchema не имеет прямого отношения к коллекции Answers (например, не хранит ссылку Answers), попробуйте следующее:

Запрос:

db.Question.aggregate([
    {
        $lookup:
        {
            from: "Answer",
            localField: "_id",
            foreignField: "question",
            as: "answers"
        }
    }, 
    /** In case if you need all details of question replace 'project' with 'addFields' & remove 'question: 1' */
    { $project: { question: 1, count: { $size: '$answers' } } } 
])

Тест: MongoDB-Playground

person whoami - fakeFaceTrueSoul    schedule 31.01.2020