Как получить данные mongoDB на основе субдокументов? - PullRequest
0 голосов
/ 04 февраля 2020

ниже - моя схема, и я хочу получить данные за 2018 год. Я пытаюсь использовать приведенный ниже код, который не работает, как его исправить

var data=await mongoose.model('revenues').find({name:'ff',"data.Year":2017});

схема доходов

const mongoose = require('mongoose');
const { Schema } = mongoose;
const revenueSchema = new Schema({
    AccountName: String,
    data: [{Name:String,Year:Number,Value:Number,Volume:Number}],
  });

  mongoose.model('revenues', revenueSchema);


[
{
name:'ff',
data:[
  { Name: 'G1a Revenue', Year: 2017, Value: 456908, Volume: 33490 },
  { Name: 'G1a0a Revenue', Year: 2018, Value: 789123, Volume: 32656 },
  { Name: 'G11e0 Revenue', Year: 2019, Value: 543213, Volume: 31656 },
  { Name: 'Gy1a Revenue', Year: 2017, Value: 456908, Volume: 33490 },
  { Name: 'Gy1a0a Revenue', Year: 2018, Value: 789123, Volume: 32656 },
  { Name: 'Gy11e0 Revenue', Year: 2019, Value: 543213, Volume: 31656 }
 ]
 }
]

1 Ответ

0 голосов
/ 04 февраля 2020

Ну, это на самом деле работает. "data.Year":2017 означает, что вы хотите найти документы, которые имеют хотя бы 1 поле Year в объекте / массиве объектов data со значением 2017. Я думаю, вы хотите отфильтровать data элементов. Затем вам нужно использовать проекцию как это:

mongoose.model('revenues').aggregate([
  {
    $match: {
      name: "ff"
    }
  },
  {
    $project: {
      _id: 0,
      name: 1,
      data: {
        $filter: {
          input: "$data",
          as: "el",
          cond: {
            $eq: [
              "$$el.Year",
              2018
            ]
          }
        }
      }
    }
  }
]);

Выход:

 [
  {
    "data": [
      {
        "Name": "G1a0a Revenue",
        "Value": 789123,
        "Volume": 32656,
        "Year": 2018
      },
      {
        "Name": "Gy1a0a Revenue",
        "Value": 789123,
        "Volume": 32656,
        "Year": 2018
      }
    ],
    "name": "ff"
  }
]

Вы можете проверить результаты здесь: Пн go Детская площадка

Источник: Оператор фильтра MongoDB $

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...