Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MongoDB.Driver.GridFS.Delete上的MongoDB createIndexes异常_C#_Mongodb_Mongodb Query_Mongodb .net Driver - Fatal编程技术网

C# MongoDB.Driver.GridFS.Delete上的MongoDB createIndexes异常

C# MongoDB.Driver.GridFS.Delete上的MongoDB createIndexes异常,c#,mongodb,mongodb-query,mongodb-.net-driver,C#,Mongodb,Mongodb Query,Mongodb .net Driver,我使用的是C#MongoDB.Driver,版本=1.10.1.73 请注意,我知道的不是我的问题 错误消息: MongoDB.Driver.MongoWriteConcernException:命令'createIndexes' 失败:异常:名称为:filename\u 1\u uploadDate\u 1的索引已存在 存在不同的选项(响应:{ “createdCollectionAutomatically”:false,“numIndexesBefore”:4, “errmsg”:“异常:名

我使用的是C#MongoDB.Driver,版本=1.10.1.73

请注意,我知道的不是我的问题

错误消息:

MongoDB.Driver.MongoWriteConcernException:命令'createIndexes' 失败:异常:名称为:filename\u 1\u uploadDate\u 1的索引已存在 存在不同的选项(响应:{ “createdCollectionAutomatically”:false,“numIndexesBefore”:4, “errmsg”:“异常:名称为:filename\u 1\u uploadDate\u 1的索引” 已存在不同的选项,“代码”:85,“确定”:0.0})

完整堆栈跟踪:

MongoDB.Driver.MongoCollection.CreateIndex(IMongoIndexKeys, IMongoIndexOptions选项)
MongoDB.Driver.MongoCollection.CreateIndex(IMongoIndexKeys)
MongoDB.Driver.MongoCollection.CreateIndex(字符串[]键名)
MongoDB.Driver.GridFS.MongoGridFS.ensureIndex(Int32 maxFiles)
MongoDB.Driver.GridFS.MongoGridFS.ensureIndex()
MongoDB.Driver.GridFS.MongoGridFSFileInfo.Delete()


默认情况下,会在我的Mongo服务器3.0.7版上创建
filename\u 1\u uploadDate\u 1
索引。唯一的默认设置为“非唯一”。每当某段代码强制此索引是唯一的(我认为它应该是唯一的),在从Mongo删除时就会发生上述异常

解决方案:如果索引不存在,则创建它,如果存在且唯一,则重新创建为非唯一

            CommandResult cr = null;
            IndexOptionsDocument NotUnique = new IndexOptionsDocument("unique", false);
            IndexKeysDocument fileNameUploadDateIdx = new IndexKeysDocument(
                new List<BsonElement> { 
                        new BsonElement(ColumnFilename, 1), 
                        new BsonElement(ColumnUploadDate, 1) });
            var index = indexes.FirstOrDefault(
                i => i.Key.Equals(fileNameUploadDateIdx.ToBsonDocument()));

            if (index == null)
            {
                cr = files.CreateIndex(fileNameUploadDateIdx, NotUnique);
                if (!cr.Ok) {
                    //Cannot create uploadDate index
                }
            }
            else if (index.IsUnique)
            {
                cr = files.DropIndexByName(index.Name);
                if (!cr.Ok) {
                    // Cannot drop index filename_1_uploadDate_1. 
                }
                else
                {
                    cr = files.CreateIndex(fileNameUploadDateIdx, NotUnique);
                    if (!cr.Ok) {
                    //Cannot create uploadDate index
                    }
                }
            }
CommandResult cr=null;
IndexOptions Document NotUnique=新的IndexOptions文档(“唯一”,false);
IndexKeysDocument文件名UploadDateIDX=新IndexKeysDocument(
新列表{
新的BsonElement(ColumnFilename,1),
新的BSoneElement(ColumnUploadDate,1)});
var index=index.FirstOrDefault(
i=>i.Key.Equals(fileNameUploadDateIdx.ToBsonDocument());
如果(索引==null)
{
cr=files.CreateIndex(fileNameUploadDateIdx,NotUnique);
如果(!cr.Ok){
//无法创建上载日期索引
}
}
else if(index.IsUnique)
{
cr=files.DropIndexByName(index.Name);
如果(!cr.Ok){
//无法删除索引文件名\u 1\u上载日期\u 1。
}
其他的
{
cr=files.CreateIndex(fileNameUploadDateIdx,NotUnique);
如果(!cr.Ok){
//无法创建上载日期索引
}
}
}

根据我们的观点,如果不删除并重新创建索引,就无法修改索引上的选项。也解决了这一问题,并提供了一种扩展方法来包装此拖放并从头开始重新创建行为。

我看不出此错误与此代码有何关系。哪一行实际抛出异常?堆栈跟踪和行抛出异常都在问题中标记…对于数据已经在其中的集合,这可能非常昂贵。
            CommandResult cr = null;
            IndexOptionsDocument NotUnique = new IndexOptionsDocument("unique", false);
            IndexKeysDocument fileNameUploadDateIdx = new IndexKeysDocument(
                new List<BsonElement> { 
                        new BsonElement(ColumnFilename, 1), 
                        new BsonElement(ColumnUploadDate, 1) });
            var index = indexes.FirstOrDefault(
                i => i.Key.Equals(fileNameUploadDateIdx.ToBsonDocument()));

            if (index == null)
            {
                cr = files.CreateIndex(fileNameUploadDateIdx, NotUnique);
                if (!cr.Ok) {
                    //Cannot create uploadDate index
                }
            }
            else if (index.IsUnique)
            {
                cr = files.DropIndexByName(index.Name);
                if (!cr.Ok) {
                    // Cannot drop index filename_1_uploadDate_1. 
                }
                else
                {
                    cr = files.CreateIndex(fileNameUploadDateIdx, NotUnique);
                    if (!cr.Ok) {
                    //Cannot create uploadDate index
                    }
                }
            }