Usando sparse: true ainda obtendo MongoError: E11000 duplicate key error
Esquema (../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);
add-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
}
})
erro:
MongoError: E11000 duplicate key error index: bot.contacts.$name_1 dup key: { : null }
Depois de ver a mensagem de erro, eu pesquisei e aprendi que, quando o documento é criado, como o nome não está definido, ele é tratado como nulo.Veja o segmento do Google Group do Mongoose A primeira vez que AM.notOwned é chamada, funcionará, pois não há documentos na coleção sem uma chave de nome. AM.notOwned irá inserir um documento com um campo de ID e um campo de país.
Chamadas subseqüentes de AM.notOwned falhar porque já existe um documento sem campo de nome, portanto, seu tratado como nome: null, e o segundo AM.notOwned é chamado de falha, pois o campo "name" não está definido e é tratado como null também ; assim não é único.
Então, seguindo o conselho do segmento Mongoose e lendo omongo docs Eu olhei para usar esparsas: verdade. No entanto, ainda está jogando o mesmo erro. Além disso, pensei que poderia ser o mesmo problema:isto, mas definir o esquema como nome: {type: String, index: {unique: true, sparse: true}} também não o corrige.
este ASSIM. A pergunta / resposta me leva a acreditar que isso pode ter sido causado pelo fato de o índice não estar correto, mas não tenho certeza de como ler o db.collection.getIndexes () no console do 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
}
]
O que posso fazer para resolver esse erro?