Как заполнить или получить данные других коллекций в Mongoose - PullRequest
0 голосов
/ 18 июня 2020

Я хочу получить данные коллекции restaurantOffer при запросе данных ресторана.

Вот моя база данных Модель

Ресторан. js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const restaurantSchema = new Schema({
     name: String,
     phone: String
 },
 {
     toJSON: { virtuals: true },
     toObject: { virtuals: true },
 },
 { timestamps: true }
);

module.exports = mongoose.model('Restaurant', restaurantSchema);

Предложение. js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const RestaurantOffer = new Schema({
     offerType: String,
     offerDetails: [String],
     restaurant: {type: Schema.ObjectId, ref: "Restaurant", required: true}
 },
 { timestamps: true }
);

module.exports = mongoose.model('RestaurantOffer', restaurantSchema);

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

let restaurantWithOffer = await Restaurant.find();

res.status(200).json({ success: true, data: restaurantWithOffer });

Выше для образца. Теперь я хочу получить ответ, подобный этому ниже

{
    _id: 5e5976099b8f3737907bcc7e,
     name: "Restaurant Name 1",
     phone: "0123456789",
     offer:{
      id: '5e5976099b8f3737907bcc7e',
      OfferType: "OfferType",
      offerDetails: []
     }
},
{
    _id: 5e5976099b8f3737907bcc7e,
     name: "Restaurant Name 2",
     phone: "0123456789",
     offer:{
      id: '5e5976099b8f3737907bcc7e',
      OfferType: "OfferType",
      offerDetails: []
     }
},
{
    _id: 5e5976099b8f3737907bcc7e,
     name: "Restaurant Name 3",
     phone: "0123456789",
     offer:{
      id: '5e5976099b8f3737907bcc7e',
      OfferType: "OfferType",
      offerDetails: []
     }
},

1 Ответ

0 голосов
/ 18 июня 2020
First change your offer js with this code .

Предложение. js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const restaurantOfferSchema = new Schema({
     offerType: String,
     offerDetails: [String],
     restaurant_id: {type: String, required: true}
 },
 { timestamps: true }
);


restaurantOfferSchema.virtual('restaurant', {
  ref: 'Restaurant',
  localField: 'restaurant_id',
  foreignField: '_id',
  justOne: true
});

module.exports = mongoose.model('RestaurantOffer', restaurantOfferSchema);

Измените свой запрос, как указано

Restaurant.aggregate([
   {
     $lookup:
       {
         from: "RestaurantOffer",
         localField: "_id",
         foreignField: "restaurant",
         as: "RestaurantOffer"
       }
  }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...