Найти документы, чьи поля вложенных документов частично соответствуют заданным критериям с Mongoose - PullRequest
0 голосов
/ 20 июня 2019

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

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

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

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 для извлечения документов, чьи вложенные документы (смешанного типа) частично соответствуют критериям, аналогично тому, как find работает в полях верхнего уровня.

1 Ответ

0 голосов
/ 20 июня 2019

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

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