#node.js #mongoose
#node.js #mongoose
Вопрос:
Я использую Mongoose. У меня есть следующая модель:
person = {
name: String,
projects: [
{
projectId: {
type:mongoose.Schema.Types.ObjectId,
required:true
},
userNotes: {
type: String
}
}
]
};
Я хочу иметь возможность находить всех пользователей, у которых есть хотя бы один проект с идентификатором проекта в списке const projectIds = ['aafefaeiIE2afd', 'afeaf33afe','gg3r3a']
. Я пытался сделать что-то вроде этого:
const results = Person.find({projects:{$exists:true,$contains:projectIds}});
Но, очевидно, это не сработает, потому что a) у mongoose нет a $contains
и b) person.projects
это массив объектов, а не массив строк, и мне нужно сопоставить объекты projectId
.
Как мне заставить mongoose выполнить запрос, который я ищу?
Ответ №1:
Я не уверен, что это именно то, что вы ищете, но, насколько я понимаю, это может помочь.
db.collection.find({
"projects": {
"$elemMatch": {
"projectId": {
"$in": [
"aafefaeiIE2afd" //<-- You can use your array here instead
]
}
}
}
})
Комментарии:
1. Я заменил
db.collection
наPerson
. Но это вернуло нулевые результаты. Обратите внимание, что я работаю с Mongoose в приложении NodeJS и не работаю напрямую с базой данных mongodb. Есть ли у меня способ «вводить необработанные запросы» в mongodb из mongoose?2. Возможно ли это, если вы предоставите образец данных для запроса? Mongoose — это оболочка
MongoDB
, поэтому все запросы должны работать
Ответ №2:
Вы можете использовать точечную нотацию с $in для ее решения:
Person.find({
"projects.projectId": {
$in: your_array
}
})