Использование 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
    }
]

Что я могу сделать, чтобы устранить эту ошибку?

Ответы на вопрос(1)

Ваш ответ на вопрос