Запрос к базе данных для фильтрации данных внутри массива объектов - PullRequest
1 голос
/ 21 марта 2019

У меня есть пакет документов в следующем формате на моем mongodb, я использую moongoose в качестве ORM.

Может ли кто-нибудь помочь мне сделать запрос, чтобы получить все содержимое, имеющее name = abc внутри data-items.content

Документ 1:

{
 "title": "Some title",
 "addresse": "data",
 "data-items": { 
 "content": [
   {
   "name": "abc",
   "age": "poster5.jpg"
   },
   {
    "name": "def",
    "age": "poster5.jpg"
   },
   {
    "name": "hij",
    "age": "poster5.jpg"
   }]
 }
}

Документ 2:

{
"title": "another title",
"addresse": "data",
"data-items": {
  "content": [
    {
      "name": "abc",
      "age": "poster7.jpg"
    },
    {
      "name": "def",
      "age": "poster5.jpg"
    },
    {
      "name": "hij",
      "age": "poster5.jpg"
    }]
  }
 }

Любая помощь приветствуется

1 Ответ

1 голос
/ 21 марта 2019

Вы можете просто использовать точечную нотацию для запроса массива вложенных документов:

Model.find({"data-items.content.name": "abc"})

РЕДАКТИРОВАТЬ: для получения только вложенных документов, соответствующих вашему условию, которые вы можете использовать при агрегации ниже:

Model.aggregate([
    {
        $match: {
            "data-items.content.name": "abc"
        }
    },
    {
        $unwind: "$data-items.content"
    },
    {
        $match: {
            "data-items.content.name": "abc"
        }
    },
    {
        $replaceRoot: {
            newRoot: "$data-items.content"
        }
    }
])

$ unwind выдаст вам один документ за content, а $ replaceRoot переведет его на корневой уровень.

...