我目前从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函数。我只是不知道如何在我的场景中使用它。
有人可以帮我解决这个问题吗?提前谢谢!
答案 0 :(得分:3)
在更新期间使用upsert作为选项时,如果文档不存在,则会创建该文档。不是试图找到每个餐馆然后插入它们,你可以为每个餐馆调用update,并将upsert设置为true(我认为它类似于this)
另一种可能更有效的方法是通过创建unique index将yelp_id
设置为关键字,然后在插入重复的条目时它会失败,因此您无需担心已经在数据库中。