我正在学习如何使用LiteDB。这是我用来将.Net对象插入数据库的一些C#代码:
// Create new YacksProjectInfo object and insert it into the database
YacksProjectInfo projectInfo = new YacksProjectInfo(AssemblyName, moduleNumber);
yacksProjects.Insert(projectInfo); // Id field generated automatically
yacksProjects.EnsureIndex((YacksProjectInfo x) => x.ProjectName);
yacksProjects.EnsureIndex((YacksProjectInfo x) => x.ModuleNumber);
换句话说,每次向数据库添加新对象时,我都会使用EnsureIndex()方法。但是我猜这不是必要的,你只需要在插入第一个对象后做一次。
有人可以确认每次都需要完成EnsureIndex(),或者一次是否足够?
答案 0 :(得分:0)
我在这里找到了答案(在找到另外两个提出同样问题的人之后,我对于提出一个相当明显答案的问题略显尴尬):https://github.com/mbdavid/LiteDB/issues/789
引用:
“我是否需要在每次写入操作时将其称为EnsureIndex?”
“我想知道同样的事情。你什么时候调用EnsureIndex?你是在第一次将新集合添加到数据库来设置索引时使用它吗?或者你是否每次都需要使用它以调用GetCollection为例?文档对此并不十分清楚。“
回答@mbdavid,他创建了LiteDB:
“你需要在运行查询到数据库创建索引之前调用EnsureIndex如果需要。如果索引已经创建(使用相同的EnsureIndex),那么EnsureIndex将什么都不做。所以,要做得好,最好的地方是创建你的所有索引都在数据库初始化“
顺便说一下,我在使用EnsureIndex()时也学到了别的东西 - 它有第二个参数“unique”,一个bool值。所以我猜测设置为真(当相关时)会稍微提高效率并且还会阻止插入具有非唯一索引的新文档。
所以现在我创建的LiteDB数据库集合如下所示:
// Get the collection (or create, if doesn't exist)
LiteCollection<YacksProjectInfo> yacksProjects =
liteDatabase.GetCollection<YacksProjectInfo>("YacksProjects");
// Index current and future documents using ProjectName and ModuleNumber properties
yacksProjects.EnsureIndex((YacksProjectInfo x) => x.ProjectName, true);
yacksProjects.EnsureIndex((YacksProjectInfo x) => x.ModuleNumber, true);