использование ensureIndex в схеме mongodb с использованием мангуста
Я хотел бы назвать ensureIndex
на authorName
, какая команда и где в этом коде я должен поставить его?
var mongoose = require('mongoose');
// defines the database schema for this object
var schema = mongoose.Schema({
projectName : String,
authorName : String,
comment : [{
id : String,
authorName : String,
authorEmailAddress : { type : String, index : true }
}]
});
// Sets the schema for model
var ProjectModel = mongoose.model('Project', schema);
// Create a project
exports.create = function (projectJSON) {
var project = new ProjectModel({
projectName : projectJSON.projectName,
authorName : projectJSON.authorName,
comment : [{
id : projectJSON.comments.id,
authorName : projectJSON.comments.authorName,
authorEmailAddress : projectJSON.authorEmailAddress
});
project.save(function(err) {
if (err) {
console.log(err);
} else{
console.log("success");
}
});
});
}
4 ответов
ты не звонишь ensureIndex
непосредственно вы указываете, что поле должно быть индексировано в вашей схеме следующим образом:
var schema = mongoose.Schema({
projectName : String,
authorName : { type: String, index: true }
});
основываясь на этом определении, Мангуст вызовет ensureIndex
для вас, когда вы регистрируетесь модель через mongoose.model
звонок.
посмотреть ensureIndex
вызовы, которые делает Мангуст, включите отладочный вывод, добавив в свой код следующее:
mongoose.set('debug', true);
вы можете использовать это утверждение:
mongoose.connection.collections['my_collection'].ensureIndex({ "key": 1 }, { "unique": true }, callback);
например, вы хотите сделать некоторые интеграционные тесты, поэтому вам нужно будет быстро удалить свои коллекции.
В этом случае мангуст не устанавливает индексы снова во время выполнения, даже если option autoIndex
установлено значение true
.
В таком случае этот ответ может оказаться полезным.
Вы можете вызвать метод Schema#index для создания index
let urlSchema = new Schema({
url: String,
status: Number
}
);
urlSchema.index({ url: 1 }, { unique: true, background: true, dropDups: true });
вы можете прослушать событие createing index.
let UrlModel = mongoose.model('url', urlSchema);
UrlModel.on('index', function(error) {
if (error && error.message) {
console.log(`Url collection create index error:${error.message}`);
}
});
Примечание: процесс создания индекса является асинхронным.поэтому при создании уникального индекса невозможно вставить дубликаты данных. или создание индекса завершится неудачей;
сначала определите индекс в поле authorName, и если вы вручную хотите вызвать ensureIndex из-за определенного требования, то вам нужно установить появилась в false. Вот как будет выглядеть ваша схема:
var schema = mongoose.Schema({
projectName : String,
authorName : {type : String, index : true}
comment : [{
id : String,
authorName : String,
authorEmailAddress : { type : String, index : true }
}]
}, {
// Turn-off auto indexing, we manually need to trigger indexing
autoIndex : false
});
и на основе требования вы можете вызвать метод ensureIndexes на модели, созданной с помощью этой схемы, т. е. ProjectModel.ensureIndexes ();