Я пытаюсь создать индекс на двух полях схемы, которые должны быть уникальными и редкими в MongoDB используя Mongoose следующим образом:Уникальный и разреженных схемы уровня индекса MongoDB и Mongoose
var ArraySchema = new Schema ({
user_id: {type: mongoose.Schema.Types.ObjectId, ref:'User'},
event_id: {type: mongoose.Schema.Types.ObjectId, ref:'Event'}
}, {_id:false});
ListSchema.index({user_id:1, event_id:1}, {sparse:true, unique:true});
который затем используется в массиве в схеме пользователя, как например:
var User = new Schema({
arrayType1 : {
type: [ArraySchema]
},
arrayType2 : {
type: [ArraySchema]
},
arrayType3 : {
type: [ArraySchema]
}
//More specifications for user schema...
});
Однако при попытке сохранить несколько пользователей без array
поля, ошибки выбрасываются дублированных полей. Ошибка в Mocha выглядит примерно так: array.event_id_1 dup key {null, null}
. Пример сегмента кода, который бы бросить эту ошибку следующим образом:
var user1, user2;
user1 = new User({
username : 'username1',
password : 'password'
});
user2 = new User({
username : 'username2',
password : 'password'
});
user1.save(function() {
user2.save();
});
Вот мои рассуждения позади делая поля ArraySchema уникального и редкого: Если array
поля предписанный в технических заданиях, я не хочу, массив, содержащий повторяющиеся объекты; однако поле array
не требуется, поэтому будет много пользователей, у которых есть null
для этого поля. Очевидно, я не могу использовать индексы на уровне поля, так как есть несколько полей, которые нуждаются в индексе (arrayType1
, arrayType2
, arrayType3
).
Это был мой ответ тоже :) –