Как мне ввести эквивалент внешнего ключа в документ MongoDB?

#mongodb #express #mongoose

#mongodb #выражать #мангуст

Вопрос:

Я создаю проект, в котором есть две коллекции: cafes для хранения информации о различных кафе и reviews для хранения информации об отзывах о кафе, которая структурирована следующим образом:

 Database
|
 --cafes (collection)
       -- _id:5ffb7a6bf32d1b27ac8474d9
          cafeName:"Customs Coffee
          photoURL:"https://*******
 --reviews (collection)
       --_id:5ffb95b75624dd13d825ea5e
          userName:"Josh"
          stars:"4"
           title:"Second review of customs coffee"
          photo:"photoURL.com"
          blurb: "this is the blurb for the second review of customs"
          cafe:"Customs Coffee"
          createdAt:2021-01-11T00:03:03.842 00:00
 

Я хочу, чтобы каждый документ обзора в reviews коллекции также содержал идентификатор кафе, о котором идет обзор — есть какие-либо предложения о том, как я могу это сделать? Так, например, обзорный документ, как показано выше, в идеале должен выглядеть следующим образом:

           id:5ffb95b75624dd13d825ea5e
          userName:"Josh"
          stars:"4"
           title:"Second review of customs coffee"
          photo:"photoURL.com"
          blurb: "this is the blurb for the second review of customs"
          cafe:"Customs Coffee"
          **cafeId:5ffb7a6bf32d1b27ac8474d9**
          createdAt:2021-01-11T00:03:03.842 00:00
 

Вот схема для коллекции cafes and reviews :

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

const cafeSchema = new Schema({
    cafeName:String,
    photoURL:String,
}, {timestamps:true})

cafeSchema.virtual('reviews', {
    ref: 'Review',
    localField: '_id',
    foreignField: 'cafe'
});

const Cafe = mongoose.model('cafes', cafeSchema)

module.exports = Cafe
 
 const mongoose = require('mongoose')
const Schema = mongoose.Schema

const reviewSchema = new Schema({
    userName:String,
    stars:String,
    title:String,
    photo:String,
    blurb:String,
    cafeName:String,
    cafe: {
        type: Schema.Types.ObjectId,
        ref: 'Cafe'
    }
}, {timestamps:true})

const Review = mongoose.model('reviews', reviewSchema)

module.exports = Review
 

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

1. у вас есть особая причина для использования populating virtual в CafeSchema? из-за вашей проблемы не нужно создавать cafeSchema.virtual