MongoDB和C#-检查文档是否存在,是否不插入
作者:互联网
目前,我从Yelp Fusion API中获得了50家餐厅的列表.我想将这些餐厅保存在数据库中,以备将来在应用程序中使用.
由于我是根据用户的坐标获取此列表的,因此该API可能会返回数据库中已有的餐厅.为防止重复,我检查yelp提供的餐厅ID是否已存在于数据库中.如果已经在我的数据库中,则不会插入该餐厅.
我正在使用MongoDB数据库.
我使用以下功能完成此操作:
public async static void CheckSubjects(List<Subject> subjects)
{
SubjectRepository rep = new SubjectRepository();
List<Subject> insert = new List<Subject>();
foreach (var item in subjects)
{
if (!rep.SubjectsExists(item).GetAwaiter().GetResult())
insert.Add(item);
}
if (insert.Count > 0)
await rep.CreateAllSubjects(insert);
}
在此功能中,主题是餐厅.存储库是与数据库进行通信的类.
这是我检查餐厅是否已经存在的功能:
public async Task<bool> SubjectExists(Subject sub)
{
var result = await db.Subjects.Find(Builders<Subject>.Filter.Eq("yelp_id", sub.yelp_id)).FirstOrDefaultAsync();
if (result != null)
return true;
else
return false;
}
您可以看到对数据库进行50次调用以查看其是否已经存在,这对性能非常重要.我做了一些研究,发现MongoDB提供了upsert功能.我只是不知道如何在我的场景中使用它.
有人可以帮我吗?提前致谢!
解决方法:
在更新过程中使用upsert作为选项时,如果不存在文档,则会创建该文档.与其尝试查找每个餐厅,然后将其插入,不如将每个餐厅的update设置为true(我认为这类似于this),
另一个可能更有效的方法是通过创建unique index将yelp_id设置为键,然后在插入重复的条目时它将失败,因此您不必担心它是否已在数据库中.
标签:upsert,mongodb,c 来源: https://codeday.me/bug/20191118/2025542.html