Использование sparse: true все еще приводит к получению MongoError: ошибка дублирующегося ключа E11000
Схема (../models/add.js)
var addSchema = new Schema({
name: {type: String, unique: true, sparse: true},
phone: Number,
email: String,
country: Number
});
module.exports = mongoose.model('Contact', addSchema);
Надстройка manager.js
var Add = require('../models/add.js');
var AM = {};
var mongoose = require('mongoose');
module.exports = AM;
AM.notOwned = function(country, callback)
{
Add.update({country: country}, {country: country}, {upsert: true}, function(err, res){
if (err) callback (err);
else callback(null, res);
})
}
news.js
// if country # is not in the database
AM.notOwned(country, function(error, resp){
if (error) console.log("error: "+error);
else
{
// do stuff
}
})
ошибка:
MongoError: E11000 duplicate key error index: bot.contacts.$name_1 dup key: { : null }
Увидев сообщение об ошибке, я погуглил и узнал, что при создании документа, так как имя не задано, оно считается нулевым.Посмотреть нить группы Google Mongoose При первом вызове AM.notOwned он будет работать, поскольку в коллекции нет документов без ключа имени. AM.notOwned вставит документ с полем идентификатора и полем страны.
Последующие вызовы AM.notOwned завершаются сбоем, поскольку уже существует документ без поля имени, поэтому он обрабатывается как name: null, а второй AM.notOwned вызывается с ошибкой, поскольку поле "name" не задано и также обрабатывается как null ; таким образом, это не уникально.
Итак, следуя совету нити Мангуста и читаямонго документы Я посмотрел на использование разреженного: правда. Тем не менее, он все еще выбрасывает ту же ошибку. Далее, глядя на это, я подумал, что это может быть та же проблема, что и:это, но установка схемы на name: {type: String, index: {unique: true, sparse: true}} также не исправляет это.
Этот ТАК. вопрос / ответ заставляет меня поверить, что это может быть вызвано неправильным индексом, но я не совсем уверен, как читать db.collection.getIndexes () из консоли Mongo.
db.contacts.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "bot.contacts",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"name" : 1
},
"unique" : true,
"ns" : "bot.contacts",
"name" : "name_1",
"background" : true,
"safe" : null
}
]
Что я могу сделать, чтобы устранить эту ошибку?