現在、Yelp Fusion APIから50のレストランのリストを取得しています。私はこれらのレストランを私のデータベースに保存して、私のアプリケーションでさらに使いたいと思っています。MongoDBとC# - 文書が存在しないかどうかの確認
私はこのリストをユーザーの座標に基づいて取得しているので、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を呼び出してもパフォーマンスは悪いですか? – RandomStranger
私は、あなたが一度ループするように、今はちょっとだけ良いと思う。しかし、私は第二のアプローチがずっと良いと思う。 – andresk
申し訳ありませんが、多くの! – RandomStranger