代码之家  ›  专栏  ›  技术社区  ›  Idra

LiteDB多列/字段ID

  •  0
  • Idra  · 技术社区  · 6 年前

    我有一个有多个字段的类。 比如说:

    class MyClass {
        public int x {get; set;}
        public int y {get; set;}
        public int z {get; set;}
    }
    

    我想在该类中使用LiteDB,并让它同时使用x和y作为键。 例如:

    MyClass{x: 0, y: 0, z:0}
    MyClass{x: 0, y: 1, z:0}
    

    将被视为我的LiteDB数据库中的两个不同条目。

    所以我基本上想要这样的东西:

    var mapper = BsonMapper.Global;
    mapper
        .Entity<MyClass>()
        .Id(c => new {c.x, c.y});
    var db = new LiteDatabase("PATH_HERE", mapper);
    

    显然,Id(c=>new{c.x,c.y});不起作用。我也试过了

    .Id(c => c.x)
    .Id(c => c.y);
    

    但它也不起作用。我尝试在LiteDB文档中寻找解决方案,但找不到任何解决方案。这可能吗?如果是这样,我很想知道如何实现我的目标。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   mbdavid    6 年前

    在里面 BsonDocument , _id 必须是单个值,没有复合键。但此值可以是另一个文档。因此,您可以使用:

    class MyId {
        public int x { get; set; }
        public int y { get; set; }
    }
    
    class MyClass {
        public MyId Id { get; set; }
        public int y { get; set; }
    }
    

    现在您可以使用

    col.Find(x => x.Id = new Id { x = 0, y = 1 })