Nodejs Mongo создает модель коллекции со списком объектов, в которых эти объекты также находятся в списке - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу запросить Mongodb, чтобы получить все машины, принадлежащие одной и той же компании , но Я не хочу искать всю базу данных, а затем проверять каждую запись автомобиля на предмет названия компании Я хочу иметь список всех автомобилей той же компании в одном месте в моей коллекции carGarage Mongo, чтобы я мог сразу получить весь список.

Это та модель, которую я хочу: проблема в том, что названия этих компаний не жестко запрограммированы, то есть, если в базу данных поступит новая запись, мне придется создать новый объект списка с этим именем. Я думаю, что это можно сделать, просто используя некоторые условия if в бэкэнде Nodejs.

carsGarage {
    bmw: [
            car1 {
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<
            },
            car2 {
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<

            },car3 {
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<

            }
        ],

    jaguar: [
            car1 {
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<

            },
            car2 {
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<

            }
          ],
    ferrari [
            {-- -- --}
            {-- -- --}
            {-- -- --} 
        ]   
}

но после прочтения о Mongo, главным образом об индексации, я думаю, что есть другой способ сделать это. Так что теперь у меня есть структура как:

   carsGarage {

            car1 { bmw ,
                 Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<
            },
            car2 {bmw ,
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<
            },car3 {jaguar ,
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<
            }


            car4 { bmw,
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<
            },
            car5 { jaguar,
                Model,  Year, PriceInINR,  Trim,
                Engine, Body,color ,transmittion_type;
                dealer - id_2: <<
            }


            { ferrari -- -- --}
            { ferrari -- -- --}
            { ferrari -- -- --}

    }

Идея состоит в том, чтобы сделать название компании индексом: так, как mongo указывает, когда он создает индексы, он хранит их отдельно, чтобы их можно было искать быстрее, -> и нет необходимости, чтобы индексы были уникальными. тоже может быть неуникальным

например. db.collection.createIndex( { name: -1 } , {unique = true}), но мы можем просто отказаться от опции {unique = true} db.collection.createIndex( { name: -1 }).

Итак, когда я найду все машины любой компании, я получу это быстрее.

Это все, о чем я могу думать, прав я или нет, и как я могу улучшить свою модель, чтобы ускорить поиск?

сейчас моя модель в nodejs выглядит следующим образом

"use strict";

const MONGOOSE = require("mongoose"),
      DB = MONGOOSE.connection;


let carGarageSchema = MONGOOSE.Schema({

      company: { 
            type: String,
            required: true
      },
      model: {
            type: String,
            required: true
      },
      year: {
            type: Number,
            required: true
      },
      PriceInINR: {
            type: Number,
            required: true
      },
      trim: {
            type: String,
            required: true

      },
      engine: {
            type: String,
            required: true
      },
      body: {
            type: String,
            required: true
      },
      color: {
            type: String,
            required: true
      },
      transmission: {
            type: String,
            required: true
      },
      dealer_id: {
            type: String,
            required: true
      }
});

let collection_name = "carsGarage";

let carGarageModel = MONGOOSE.model(collection_name, carGarageSchema);
createAscendingIndex_on_car_make(DB);

module.exports = carGarageModel;




//   indexing  at schema level -->  using node js
function createAscendingIndex_on_car_company(DB, callback) {
      let collection = DB.collection(collection_name); 

      // ? Create the index
      collection.createIndex({
            company: 1, // specifies : indexing type is ascending indexing
      }, function (err, result) {
            if (err) {
                  console.log(err);
            }
            // callback("result");
      });
}

1 Ответ

0 голосов
/ 04 сентября 2018

EDIT: enter image description here

Исходя из ваших требований (вы всегда хотите получить все автомобили для определенной компании), я бы создал документ под названием «компания», в котором содержится список автомобилей, принадлежащих этой компании.

{
  "companyName" : "Ferrari",
  "compayAddress" : "Italy",
  "companyPhoneNumber": "+1288213123",
  "cars" : [
    {
      "model": "812 superfast",
      "year" : "",
      "PriceInINR" : "",
      "trim" : "",
      "engine" : "",
      "body" : "",
      "color" : "",
      "transmission": "",
      "dealer_id" : ""
    }
    ]
}

В этом случае запрос должен быть довольно простым. Вы просто запрашиваете название компании, а затем возвращаете список автомобилей, которые принадлежат компании. Индекс будет в companyName и будет уникальным.

В случае, если вы хотите вставить новую машину, я сначала проверю, существует ли компания, и если нет, я создам документ компании, а затем вставлю карту в нее.

Примечание: Ваш подход тоже хорош, но так как MongoDB является документно-ориентированной БД, и в этом случае ваши данные имеют четкую иерархию, я бы написал ее так, как я написал.

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