найдите строку из подматрицы mongo

#mongodb #mongodb-query

Вопрос:

У меня есть коллекция документов, которые выглядят так:

 {
    "_id" : ObjectId("56b53b7ddd81cc134fac76a5"),
    "name_info" : [
        "name c" : [
            {
            "aliases": ["bill", "william"]
            }
        ],
        "name e" : [
            {
            "aliases": ["robert", "bill"]
            }
        ],
    ]
}
{
    "_id" : ObjectId("87653b745481cc134fac7235"),
    "name_info" : [
        "name b" : [
            {
            "aliases": ["stan", "stanley"]
            }
        ],
        "name c" : [
            {
            "aliases": ["robert", "bill"]
            }
        ],
    ]
}
{
    "_id" : ObjectId("65433b7563a1cc134fac7634"),
    "name_info" : [
        "name b" : [
            {
            "aliases": ["tom", "tommy"]
            }
        ]
    ]
}
 

Какой запрос следует использовать в команде find() для возврата всех объектов, у которых есть псевдоним, содержащий «счет»?

Комментарии:

1. Поиск по фразе docs.mongodb.com/manual/reference/operator/query/text db.статьи.найти( { $текст: { $поиск: «»кофейня»»} } )

2. есть ли способ использовать регулярное выражение? Спасибо!

Ответ №1:

проверьте это

 db.collection.aggregate([
  {
    $project: {
      "results": {
        "$map": {
          "input": "$name_info",
          "as": "el",
          "in": {
            "data": {
              $objectToArray: "$el"
            },
            
          }
        }
      }
    }
  },
  {
    $unwind: "$results"
  },
  {
    $unwind: "$results.data"
  },
  {
    $unwind: "$results.data.v"
  },
  {
    $unwind: "$results.data.v.aliases"
  },
  {
    $match: {
      "results.data.v.aliases": "bill"
    }
  },
  
])
 

пример:
https://mongoplayground.net/p/VTNXMLNNXis

проверьте также свою коллекцию