#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"]}
})