数据库
首页 > 数据库> > MongoDB和C#-检查文档是否存在,是否不插入

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