【问题标题】:Insert many rows and check for duplicates in both field. Mongodb C#插入许多行并检查两个字段中的重复项。 MongoDB C#
【发布时间】:2017-02-23 16:01:06
【问题描述】:

我在一个集合中有 2 个字段,该集合是空的,需要填充。 它是这样定义的:

public class MyColl
{
    [BsonElement("id")]
    public ObjectId id { get; set; }
    public ObjectId A { get; set; }
    public ObjectId B { get; set; }
}

我想要实现的是:

K 成为要插入的对,例如K=(x,y) 我希望 mongodb 在执行插入行之前检查以下约束:
1) 如果 A==x AND B==y 并且这个已经存在于集合中,不要插入那个。
2) 如果 A==y AND B==x 并且这个已经存在于集合中,不要插入那个。
3) 如果 A==x AND B==y 并且已经存在 A==y 和 B==x,则不要插入。
4) 如果 A==y AND B==x 并且已经存在 A==x 和 B==y,则不要插入。

我认为我需要的是 (A,B) 和 (B,A) 上的唯一复合索引来检查 1 和 2,但我不知道如何处理其他两个约束。
我该怎么做?

【问题讨论】:

    标签: c# mongodb mongodb-indexes


    【解决方案1】:

    我通过修改类的定义解决了这个问题:

    public class MyColl {
        [BsonElement("id")]
        public ObjectId id { get; set; }
        public ObjectId A { get; set; }
        public ObjectId B { get; set; }
        public string C {get;set;}   }
    

    然后每次我添加一个元素时,我都会创建一个列表:

    List<string> elements = new List<string>();
    elements.Add(b.toString())
    elements.Add(c.toString())
    elements.Sort();
    MyColl.C = string.Concat(elements[0],elements[1]);
    

    C 包含按字母顺序排序的索引,因此将其设为唯一索引会在每次插入重复项时引发异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2014-11-26
      • 2011-12-04
      • 2021-01-16
      相关资源
      最近更新 更多