【发布时间】:2018-09-04 08:57:45
【问题描述】:
我想查询 Mongodb 以获取属于同一公司的所有汽车但是我不想搜索整个数据库然后检查每个汽车记录的公司名称 而是我想在我的 carGarage Mongo 收藏中的一个地方单独列出同一家公司的所有汽车的列表,这样我就可以一次获得整个列表。
这是我想要的模型:问题是这些公司名称不是硬编码的,也就是说,如果一个新条目进入数据库,我将不得不创建一个具有该名称的新列表对象。我认为这可以在 Nodejs 后端使用一些 if 条件来完成。
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");
});
}
【问题讨论】:
标签: node.js database mongodb mongoose collections