Пн goose - поиск в массиве и возврат совпадений - PullRequest
1 голос
/ 06 января 2020

Я ищу способ вернуть совпадающие элементы в массиве в пн go (пн goose).

Структура данных выглядит так:

[
  {
    "_id": {
      "$oid": "123456"
    },
    "make": "Lamborghini",
    "makeLogo": "/images/makeLogos/lamborghini.png",
    "models": [
      {
        "model": "Aventador",
        "_id": {
          "$oid": "678909t"
        }
      },
      {
        "model": "Countach",
        "_id": {
          "$oid": "678909"
        }
      }
    ],
    "__v": 0
  },
  {
    "_id": {
      "$oid": "2345678i90"
    },
    "make": "Nissan",
    "makeLogo": "/images/makeLogos/nissan.png",
    "models": [
      {
        "model": "350z",
        "_id": {
          "$oid": "678909gggg"
        }
      },
      {
        "model": "370z",
        "_id": {
          "$oid": "678909rrrrr"
        }
      }
    ],
    "__v": 0
  }
]

Я хотел бы найти: 3 , и он должен вернуть мне 350z и 370z .

Я попробовал следующее:

modelsModel.find(
    {"models.model": { $regex: req.query.carModel + '.*', $options:'i'}},
)
.exec(function(err, models) {
    if(err){
        res.status(400).json({error: err});
    } else {
        res.status(200).json({cars: models});
    }
});

Где возвращаются данные:

[ 
  { _id: 5ca893b7587ab519613b806e,
    make: 'Lamborghini',
    makeLogo: '/images/makeLogos/lamborghini.png',
    __v: 0,
    models: [ 
      [Object], [Object]
    ] 
  } 
]

Это когда я искал Countach , у которого есть совпадение.

Я знаю, что делаю что-то совершенно очевидно здесь не так, но для меня это так ново, я даже не знаю, с чего начать.

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

1 Ответ

1 голос
/ 06 января 2020

Вы можете использовать агрегацию ниже с mongodb 4.2

db.collection.aggregate([
  { "$match": {
    "models.model": { "$regex": "A" }
  }},
  { "$project": {
    "models": {
      "$filter": {
        "input": "$models",
        "cond": {
          "$regexMatch": {
            "input": "$$this.model",
            "regex": "A"
          }
        }
      }
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...