首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Upsert在LiteDB中不起作用

Upsert在LiteDB中不起作用
EN

Stack Overflow用户
提问于 2018-01-28 12:45:59
回答 2查看 4.3K关注 0票数 0

我试着做这样的事情:

代码语言:javascript
运行
复制
db = new LiteDatabase(@"albumdata.db");
db_string = db.GetCollection<StringPair>("strings");
db.Engine.EnsureIndex("strings", "a", true);

db_string.Upsert(new StringPair("a", "1"));
// this line throws this exception : LiteDB.LiteException: 'Cannot insert duplicate key in unique index 'a'. The duplicate value is '"a"'.'
db_string.Upsert(new StringPair("a", "1"));

但是,正如代码中提到的,我收到了以下错误:LiteDB.LiteException:‘无法在唯一索引'a’中插入重复键。重复的值是‘a’.‘’

如果存在Upsert用于插入或更新,不是吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-29 08:15:59

StringPair类包含唯一Id属性(_id字段)。LiteDB使用PK索引(_id字段)检查是否存在文档、做插入或更新。试试这个类结构:

代码语言:javascript
运行
复制
public class StringPair
{
    public StringPair(string a, string b)
    {
        this.Id = a;
        this.OtherField = b;
    }

    public StringPair()
    {
        // don't forgot parameterless ctor
    }

    // Define "Id" or use [BsonId] in your property or use FluentApi mapper

    public string Id { get; set; }
    public string OtherField { get; set; }
}


db = new LiteDatabase(@"albumdata.db");

db_string = db.GetCollection<StringPair>("strings");

// PK already contains unique index
// db.Engine.EnsureIndex("strings", "a", true);

db_string.Upsert(new StringPair("a", "1")); // insert

db_string.Upsert(new StringPair("a", "2")); // update
票数 2
EN

Stack Overflow用户

发布于 2020-09-07 02:28:32

如果您告诉LiteDb引擎应该将类的哪些属性视为id,则可以很容易地保持类的结构,并在其上使用属性BsonIdAttribute

代码语言:javascript
运行
复制
public sealed class StringPair
{
    [BsonId]
    public string First { get; set; }
    public string Second { get; set; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48486498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档