#node.js #mongodb #express #mongoose
#node.js #mongodb #выразить #мангуст
Вопрос:
Мне нужна ваша помощь, пожалуйста, с запросом mongoose для моего экспресс-приложения.
У меня есть 3 коллекции фильмов, телешоу и трейлеров, и мне нужно получить все фильмы или шоу, в которых есть трейлеры. вот модели:
var TrailerSchema = new Schema(
{
link: {
type: String,
required: true,
},
movieId: { type: mongoose.Schema.Types.ObjectId, ref: 'Movie' },
showId: { type: mongoose.Schema.Types.ObjectId, ref: 'Show' },
}
)
module.exports = mongoose.model('Trailer', trailerSchema)
const mongoose = require('mongoose')
const Schema = mongoose.Schema
var movieSchema = new Schema(
{
title: {
type: String,
required: true,
},
rating: {
type: Number,
},
}
)
module.exports = mongoose.model('Movie', movieSchema)
в коллекции трейлеров есть несколько документов с полем MovieID, а некоторые с showId.
Теперь, как я могу получить все фильмы или шоу, у которых есть трейлеры?
Ответ №1:
поскольку вы только что сохранили movieId
TrailerSchema
и movieSchema
не имеете поля like TrailerId:[{type: mongoose.Schema.Types.ObjectId, ref: 'Trailer'}]
, вы не можете использовать populate … но сначала для вашей проблемы
let listOfIds = await Link.find( { movieId: { $exists: true } }, 'movieId._id' ).lean()
Я не знаю реальных данных, хранящихся в коллекции трейлеров для запроса в Trailer.find
после получения идентификаторов, которые вы должны искать в коллекции фильмов, чтобы получить всю информацию
let listOfMovies = await Movie.find({ _id: { $in: listOfIds.map((id) => {if(id.movieId) return id.movieId._id} ) }, })
Комментарии:
1. Спасибо за помощь, Мохаммед, я немного изменил ваше решение, и теперь я получаю listOfIds, но listOfMovies — это пустой массив. вот настройки: пусть listOfIds = await Link.find( { MovieID: { $exists: true } }, ‘_id’ ).exec() пусть listOfMovies = await Movie.find({ _id: { $in: listOfIds.map((id) => id._id)}, })
2. вы можете отредактировать мой ответ, потому что вы добавили немного информации о вопросе, просто я хочу показать вам способ извлечения данных
3. Спасибо, что показали мне, не могли бы вы помочь мне с запросом listOfMovies Я получаю пустой массив, и ошибки нет, я искал решение, но я до сих пор понятия не имею.
4. можете ли вы получить listOfIds? или является пустым массивом
5. Я получаю список идентификаторов да