Mongoose szűrő egy sor tömb objektum tömbök

szavazat
1

Én ezt a JSON:

{
  outerData: [
    {
      innerData: [
        {
          x: 1514757600000,
          y: 1
        },
        {
          x: 1514844000000,
          y: 1
        }
      ],
      name: test1
    },
    {
      innerData: [
        {
          x: 1514757600000,
          y: 1
        },
        {
          x: 1514844000000,
          y: 1
        }
      ],
      name: test2
    }
  ]
}

és azt szeretné szűrni x > 'SOME_VALUE'és név szerint.

megpróbáltam

 Model.find(
    {
      outerData: {
        $elemMatch: {
          innerData: {
            $elemMatch: {
              x: { $gte: 151994160000 }
            }
          }
        }
      }
    }, function (error: any, data: any) {
      response.json(data);
    })

Megjegyzés, ha a lekérdezés egy dokumentum lelet ({}) is visszatér egy listát. Én is próbáltam ezt $aggregate, és$filter

Minden segítséget előre is köszönjük

EDIT: Az adatok tömb tartalmaz 356 értékeket minden nap egy év alatt. Azt akarom, hogy mondjuk az elmúlt 7 ahol x aki egy időbélyeg között kezdő és egy befejező időbélyeg

{
  outerData: [
    {
      innerData: [
        {
          x: 1514757600000,
          y: 1
        },
        // ...6  more
      ],
      name: test1
    },
    {
      innerData: [
        {
          x: 1514757600000,
          y: 1
        },
        // ...6  more
      }
    ],
    name: test2
  },
  {
    innerData: [
      {
        x: 1514757600000,
        y: 1
      },
      // ...6  more
    }
  ],
  name: test3
}
]
}
A kérdést 12/07/2018 20:08
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Ok Kitaláltam

db.collection.aggregate([
  {
    $unwind: "$outerData",

  },
  {
    $project: {
      "outerData": {
        "innerData": {
          $filter: {
            input: "$outerData.innerData",
            as: "data_",
            cond: {
              $and: [
                {
                  $gt: [
                    "$$data_.x",
                    1514757600000
                  ]
                },
                {
                  $lt: [
                    "$$data_.x",
                    1514930400000
                  ]
                }
              ]
            }
          }
        },
        "name": 1
      }
    }
  }
])
Válaszolt 13/07/2018 10:32
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more