Найдите документы, поля вложенных документов которых частично соответствуют заданным критериям с помощью Mongoose

Я использую nodeJS и mongoose/mongoDB для создания API. Рассмотрим следующую модель универсальной модели (Gmodel):

{
   name: "teleni",
   type: "person",
   data: mixed
}

Поле данных в этом документе имеет смешанный тип, поэтому оно может быть любым, но я намереваюсь, чтобы в большинстве случаев оно было вложенным документом/объектом (в зависимости от значения поля типа). Если бы я хотел найти все документы типа person, я бы выполнил следующий код:

Gmodel.find({type: "person"}, callbackFunction)

Теперь рассмотрим другой экземпляр модели:

{
   name: "teleni",
   type: "person",
   data: {
      data_type: "event",
      date: "Jan 30 2019"
   }
}

Моя проблема в том, что я хочу использовать mongoose для поиска всех документов, где поле данных является объектом/документом, где поле data_type является «событием». Я пробовал следующий код:

Gmodel.find({data: {data_type: "event"}}, callbackFunction)

Однако ничего не возвращается, когда я выполняю этот код, потому что find ищет документы, где поле данных равно {data_type: "event"}. Итак, как мне использовать find для извлечения документов, вложенные документы которых (смешанного типа) частично соответствуют критериям, аналогично тому, как поиск работает с полями верхнего уровня.


person teleni    schedule 20.06.2019    source источник


Ответы (1)


Вы можете использовать точечный синтаксис data.data_type, чтобы указать поле в поддокументе. Таким образом, он будет соответствовать только этому полю, а не всему поддокументу, как в исходном коде.

Gmodel.find({data.data_type: "event"}, callbackFunction)
person Anton    schedule 20.06.2019