как получить документ с некоторыми параметрами, исключенными из вложенного массива в mongo?

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

У меня есть прикрепленная структура документа. Мне нужно получить документ только с некоторым параметром.

Например, мне нужно, чтобы данные были такими.

 {
  "_id": "57f36d71fb1ef61bd84f866b",
  "testMaxScore": 235,
  "testMaxTime": 60,
  "inviteId": "57f0a97d11594560c02a8f43",
  "testName": "Sr. Interactive Developer l1",
  "sectionList": [
    {
      "sectionName": "Java MCQ",
      "sectionInfo": "Some info",
      "questionList": [
        {
          "_id": "57ea3d003f2ec2cbbe98bbb9",
          "question": ""
        },
          {
          "_id": "57ea3d003f2ec2cbbe98bbb9",
          "question": ""
        }
        ]
    }
    ]
  

введите описание изображения здесь

Как я могу этого добиться?
Я использую mongoose

Кто-нибудь может мне помочь в этом

Спасибо, Киран

Ответ №1:

Возможно через структуру агрегации. Рассмотрите возможность запуска операции агрегирования, которая имеет единый конвейер с $project оператором для проецирования только тех полей, которые вы хотите.

В приведенном выше примере вы бы запустили его как

 Model.aggregate([
    {
        "$project": {
            "testMaxScore": 1,
            "testMaxTime": 1,
            "inviteId": 1,
            "testName": 1
            "sectionList.sectionName" : 1,
            "sectionList.sectionInfo" : 1,
            "sectionList.questionList._id": 1,
            "sectionList.questionList.question": 1
        }
    }
]).exec(function(err, result){
    console.log(result);
})
  

или с помощью find() метода:

 Model.find(
    { },
    {
        "testMaxScore": 1,
        "testMaxTime": 1,
        "inviteId": 1,
        "testName": 1
        "sectionList.sectionName" : 1,
        "sectionList.sectionInfo" : 1,
        "sectionList.questionList._id": 1,
        "sectionList.questionList.question": 1
    }
).exec(function(err, result){
    console.log(result);
})
  

Ответ №2:

Попробуйте использовать следующее выражение find:

 yourSchema.find({}).select('testName inviteId sectionList.sectionName'); // and so on