запрос mongodb для свойств объекта внутри массива внутри объекта

#javascript #mongodb #meteor

Вопрос:

Структура данных:

 Document:
{
  "projects": {
    "projectName" : String,
    "employees": [String]
  }
}
 

Теперь я хочу найти документ, в котором есть проект с именем «проект 1» и сотрудник «сотрудник 1».

Когда я пытаюсь выполнить запрос только по одному свойству из объекта вложенных проектов, кажется, что это не проблема. Но как только я захочу также получить доступ к вложенному массиву. Запросы начинают давать сбои.

 db.documents.find({'projects': { $elemMatch: { name: "project1", $elemMatch: { employees: 'employee1' } } })
 

Я работаю с коллекциями метеоритов, так что это выглядит так:

 Documents.findOne({'projects': { $elemMatch: { name: "project1", $elemMatch: { employees: 'employee1' } } })
 

Я также попробовал этот простой подход:

 db.collection.find({
  "projects.projectName": "project1",
  "projects.employees": "employee1"
})
 

но это не сработало.

РЕДАКТИРОВАТЬ: Как предложил Дж.Ф. Этот запрос верен. Но у меня была ошибка Схемы. После исправления все работало нормально.

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

1. Это то, что ты ищешь?

2. Вроде да, и я уже пробовал это, но для меня этот запрос ничего не возвращает. Может быть, это связано с коллекциями Метеоритов?

3. О, мужчины.. я нашел проблему… это было связано с ошибкой схемы, ваше решение правильное

Ответ №1:

Вы можете использовать оператор $in https://docs.mongodb.com/manual/reference/operator/query/in/

 db.collection.find({
  "projects.projectName": "project1",
  "projects.employees": {$in: ["employee1"]}
})