我目前从Yelp Fusion API获取一个50个餐厅的列表。我想将这些餐厅保存在我的数据库中,以便在我的应用程序中进一步使用。
由于我根据用户的坐标获取此列表,因此API可能会返回已经存在于我的数据库中的餐厅。为了避免重复,我检查yelp提供的餐厅ID是否已经存在于数据库中。如果已经存在于我的数据库中,则不会插入该餐厅。
我使用MongoDB数据库实现这一点。
我使用以下函数来实现:
您可以看到,为了检查它是否已存在,需要对数据库进行50次调用,这会大大降低性能。我进行了一些研究,并发现了来自MongoDB的upsert函数。我只是不知道如何在我的场景中使用它。
有人能帮帮我吗?提前感谢!
由于我根据用户的坐标获取此列表,因此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函数。我只是不知道如何在我的场景中使用它。
有人能帮帮我吗?提前感谢!