Как мне составить список документов с mon goose? (Схема) - PullRequest
0 голосов
/ 17 апреля 2020

Я не знаю, как составить список документов с mon goose (Node JS), кто-то знает, как это сделать?

new mongoose.Schema({
   first_name: String,
   last_name: String,
   companies: [
      {
         name_company:String,
         post:String,
         time_in_post:String,
      }     

   ] 
});

Мне нужно вставить много документов с компаниями схема в разное время, но я не знаю, как сделать это с mon goose.

Может кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Вы можете использовать этот подход, таким образом вы избежите дублирования данных:

const companySchema = new mongoose.Schema({
  name_company: String,
  post: String,
  time_in_post: String
});

new mongoose.Schema({
  firstName: String,
  lastName: String,
  companies: [companySchema] // Array of subdocuments
});

См. Полную документацию здесь: https://mongoosejs.com/docs/guide.html

0 голосов
/ 17 апреля 2020

Кажется, что разделение этого на разные схемы может быть хорошей идеей. Особенно, если другие люди будут принадлежать к той же компании.

Например, возможно, вы могли бы попробовать это:


const CompanySchema = new mongoose.Schema({
    name: String,
    // ... other company specific attributes
});

const Company = mongoose.model("Company", CompanySchema);

const UserSchema = new mongoose.Schema({
    firstName: String,
    lastName: String,
    companies: [
        {
            company: { type: mongoose.Schema.Types.ObjectId, ref: 'Company' },
            post: String,
            timeInPost: String,
        }
    ]
});

const User = mongoose.model("User", UserSchema);


И взаимодействие с моделями может выглядеть так:

(async () => {
    try {
        const company1 = await Company.create({ name: "Company 1" });
        const company2 = await Company.create({ name: "Company 2" });

        const user1 = await User.create({
            firstName: "first",
            lastName: "last",
            companies: [
                {
                    company: company1._id,
                    post: "....",
                    timeInPost: "....",
                },
                {
                    company: company2._id,
                    post: "....",
                    timeInPost: "....",
                },
            ],
        });

        const users = await User.find({}).populate("companies.company"); // in order to populate the company with the document from the company collection

        // users with companies info
    } catch (error) {
        console.log(error);
    }
})();

Ссылка из документации goose: https://alexanderzeitler.com/articles/mongoose-referencing-schema-in-properties-and-arrays/

...