#mongodb #mongoose
Вопрос:
У меня есть две модели MongoDB
var CompanySchema = new Schema({
company_name: {
type: String,
required: true
})
application.accountDB.model('companies', CompanySchema)
var UserSchema = new Schema({
customer_email: {
type: String,
required: false
},
company_id: {
type: String,
required: false,
ref: 'companies'
}
application.accountDB.model('users', UserSchema)
Я пытаюсь разбить на страницы компании, а также получать электронную почту из таблицы users, но приведенный ниже запрос приводит к разбиению на страницы пользователей и заполнению компаний, я хочу наоборот.
users.find({},{limit:10, page:0 },{populate : [{path:"company",model : application.accountDB.model('companies')}]})
Ответ №1:
Из вашего объяснения следует, что это Companies
основная коллекция, на которой вы хотите сосредоточиться, с возможностью просмотра информации о Users
том, кто связан с этой компанией?
Исходя из этого варианта использования, лучшим подходом здесь было бы работать со Companies
схемой, а затем присоединиться к Users
коллекции после разбивки на Companies
страницы .
Кроме того, агрегация MongoDB идеально подходит для этого типа запросов, которые я бы рекомендовал использовать. В приведенном мною примере используется агрегация Mongo для получения разбитого на страницы списка Companies
с их привязкой Users
.
const paginatedCompanies = await Companies.aggregate([
{ $match: { ... } }, // Use this to filter the companies if required
{ $sort: { "<field>": 1 } }, // Replace <field> with the name of whatever field you want to sort on
{ $skip: <skip> }, // Replace <skip> with the number of records you want to skip over
{ $limit: <limit> }, // Replace <limit> with the page size you want
{ $lookup: {
from: "Users",
localField: "_id",
foreignField: "company_id",
as: "users"
} }
]);
Который должен выводить что-то вроде этого:
[
{
_id: "companyId",
company_name: "Company Name",
users: [
{
_id: "userId",
customer_email: "email",
company_id: "companyId"
},
...
]
},
...
]