Mit sparse: true wird immer noch der Fehler "MongoError: E11000 duplicate key" angezeigt
Schema (../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
}
})
Error:
MongoError: E11000 duplicate key error index: bot.contacts.$name_1 dup key: { : null }
Nachdem ich die Fehlermeldung gesehen hatte, googelte ich herum und stellte fest, dass das Dokument beim Erstellen als null behandelt wird, da der Name nicht festgelegt ist.Siehe Mungo-Google-Gruppen-Thread Der erste Aufruf von AM.notOwned funktioniert, da die Sammlung keine Dokumente ohne Namensschlüssel enthält. AM.notOwned fügt dann ein Dokument mit einem ID-Feld und einem Länderfeld ein.
Nachfolgende AM.notOwned-Aufrufe schlagen fehl, da es bereits ein Dokument ohne Namensfeld gibt. Daher wird es als name: null behandelt, und der zweite AM.notOwned-Aufruf schlägt fehl, da das Feld "name" nicht festgelegt und ebenfalls als null behandelt wird ; daher ist es nicht eindeutig.
Befolgen Sie also den Rat des Mungofadens und lesen Sie diemongo docs Ich sah mit spärlicher: wahr. Es wird jedoch immer noch derselbe Fehler ausgegeben. Bei näherer Betrachtung dachte ich, es könnte dasselbe Problem sein wie:dieseDas Setzen des Schemas auf name: {type: String, index: {unique: true, sparse: true}} behebt das Problem ebenfalls nicht.
Diese SO. frage / antwort lässt mich glauben, dass es daran liegen könnte, dass der index nicht korrekt ist, aber ich bin mir nicht ganz sicher, wie ich die db.collection.getIndexes () von der mongo-konsole lesen soll.
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
}
]
Was kann ich tun, um diesen Fehler zu beheben?