Фильтр вложенных массивов Mongoose - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть схема в Mongo следующим образом:

{
"_id" : ObjectId("5c73cbeb2258414c5d9bf2a5"),
"make" : {
    "name" : "Excel Boats",
    "models" : [
        {
            "year" : 2012,
            "name" : "1860V86",
            "subModels" : [
                {
                    "name" : "",
                    "controlNumber" : "OB1133079",
                    "protoTypeNumber" : "",
                    "status" : "A",
                    "classCode" : "OB",
                    "boatType" : "UT",
                    "powerType" : "OU",
                    "boatLength" : 18,
                    "horsePower" : 70,
                    "hullConstruction" : "A",
                    "msrp" : 9589,
                    "lowCostAmount" : 4700,
                    "highCostAmount" : 5270,
                    "retailAmount" : 6540,
                    "notes" : ""
                },
                {
                    "name" : "",
                    "controlNumber" : "OB1133080",
                    "protoTypeNumber" : "",
                    "status" : "A",
                    "classCode" : "OB",
                    "boatType" : "UT",
                    "powerType" : "OU",
                    "boatLength" : 18,
                    "horsePower" : 90,
                    "hullConstruction" : "A",
                    "msrp" : 10889,
                    "lowCostAmount" : 4900,
                    "highCostAmount" : 5970,
                    "retailAmount" : 6840,
                    "notes" : ""
                }
            ]
        }
    ]
}

Я пытаюсь отфильтровать данные, чтобы я мог вернуть subModel, который имеет значение mrsp только 9589.Это код, который у меня есть в данный момент, но он возвращает пустой массив для подмоделей.

db.boats.aggregate({
      $match: {
        $and: [
          {'make.name': 'Excel Boats'},
          {'make.models.year': 2012},
          {'make.models.name': '1860V86'}
        ]
      }
    },
    {
      $project: {
        'make.models.subModels': {
          $filter: {
            input: '$make.models.subModels',
            as: 'subModel',
            cond: {$eq: ['$$subModel.msrp', 10889]}
          }
        }
      }
    }
  ).pretty()

Это результат, когда я запускаю запрос

{
"_id" : ObjectId("5c73cbeb2258414c5d9bf2a5"),
"make" : {
    "models" : [
        {
            "subModels" : [ ]
        }
    ]
}

}

Что я надеялся получить, так это результат

{
"_id" : ObjectId("5c73cbeb2258414c5d9bf2a5"),
"make" : {
    "models" : [
        {
            "subModels" : [ {
                "name" : "",
                "controlNumber" : "OB1133079",
                "protoTypeNumber" : "",
                "status" : "A",
                "classCode" : "OB",
                "boatType" : "UT",
                "powerType" : "OU",
                "boatLength" : 18,
                "horsePower" : 70,
                "hullConstruction" : "A",
                "msrp" : 9589,
                "lowCostAmount" : 4700,
                "highCostAmount" : 5270,
                "retailAmount" : 6540,
                "notes" : ""
            } ]
        }
    ]
}

}

Если кто-то может предоставить какую-либо информацию о том, что я делаю неправильно, я был бы очень признателен.У меня такое ощущение, что это как-то связано с вложенным массивом в массиве, так как я могу без проблем получать информацию в массиве моделей.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2019

Опечатки в вашем запросе.

cond: {$eq: ['$$subModel.msrp', 9589]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...