#mongodb
#mongodb
Вопрос:
Я хочу иметь коллекцию с несколькими полями, ссылающимися на несколько коллекций, что-то вроде этого:
var comboSchema = new Schema({
oneId: { type: Schema.Types.ObjectId, ref: "One" },
twoId: { type: Schema.Types.ObjectId, ref: "Two" },
threeId: { type: Schema.Types.ObjectId, ref: "Three" },
components: {
id: {type: Schema.Types.ObjectId, ref: "Component"},
amount: {type: Number}
}
}
Я знаю, что могу использовать $lookup
и aggregate
для получения данных, но похоже, что это работает только с одним полем в коллекции?
Любая помощь? Спасибо! 🙂
Комментарии:
1. Действительно не уверен, в чем здесь вопрос. Похоже, у вас есть встроенный ответ, в котором вы ожидаете, что кто-то согласится с вами. Вместо этого вы могли бы рассмотреть возможность объяснения того, чего вам нужно достичь, если вам нужен совет о том, как структурировать данные.
2. @NeilLunn Вопрос в следующем: как бы вы получили данные из такой коллекции?
Ответ №1:
Это образец модели с использованием ref, ключ ref в объекте будет принимать имя модели, на которую вы ссылаетесь
const mongoose = require('mongoose');
const postSchema = mongoose.Schema({
text: {
type: String,
required: 1
},
mediatype: {
type: String,
required: 1
},
media: {
type: String,
required: true
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
},
likes: {
type: [{
userid: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
}
}]
},
comments: {
type: [{
userid: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
},
comment: String
}]
},
}, {
timestamps: true
})
const Post = mongoose.model('post', postSchema)
module.exports = Post
затем вы можете заполнить ее следующим образом Post.find().populate('user')