Lite DB 找不到内部对象查询
Lite DB not finding inner object query
我有两个对象。
[DataContract]
public class Record
{
[DataMember]
public string Id { get; set; }
}
还有这个 class:
public class BatteryStatus : Record
{
[DataMember]
public DateTime RetrieveTime { get; set; }
}
我正在使用 Lite DB 作为本地 NoSQL 选项来查询和保存数据。我需要在一段时间后查找并删除基于的值。这是我的代码:
var col = db.GetCollection<BatteryStatus>(CollectionName);
var test = col.FindAll()
.Where(x => x.Id == status.Id).ToList();
var result = col.Find(Query.EQ("Id", status.Id.ToString())).ToList();
用对象测试returns,但结果值没有。 Lite DB 仅使用 Query 或 BSONId 作为删除对象的方式。我没有附加 BSON id(这是一个引用定义,所以我无法更改它)。
如何使用 "Query" 函数来获取嵌套值以便删除它?
我发现了 LiteDB 的问题,因为我使用的是 "Id" 的 属性 名称,BSON 将其解释为 JSON 对象的“_id”,并且合并他们的两个值。我通过将 "Id" 属性 重命名为其他名称来解决问题。
类有属性,BSON文档有字段。默认情况下,LiteDB 将所有 属性 名称转换为 BSON 文档中的相同名称,除了 _id
字段是文档标识符。
如果您想使用 Linq 进行查询,您将使用属性表达式。如果您使用 Query
对象 class,则必须使用字段名称。
var result = col.FindById(123);
// or
var result = col.FindOne(x => x.Id == 123);
// or
var result = col.FindOne(Query.EQ("_id", 123));
始终使用 _id
查找 returns 1(或零)个文档。
我有两个对象。
[DataContract]
public class Record
{
[DataMember]
public string Id { get; set; }
}
还有这个 class:
public class BatteryStatus : Record
{
[DataMember]
public DateTime RetrieveTime { get; set; }
}
我正在使用 Lite DB 作为本地 NoSQL 选项来查询和保存数据。我需要在一段时间后查找并删除基于的值。这是我的代码:
var col = db.GetCollection<BatteryStatus>(CollectionName);
var test = col.FindAll()
.Where(x => x.Id == status.Id).ToList();
var result = col.Find(Query.EQ("Id", status.Id.ToString())).ToList();
用对象测试returns,但结果值没有。 Lite DB 仅使用 Query 或 BSONId 作为删除对象的方式。我没有附加 BSON id(这是一个引用定义,所以我无法更改它)。
如何使用 "Query" 函数来获取嵌套值以便删除它?
我发现了 LiteDB 的问题,因为我使用的是 "Id" 的 属性 名称,BSON 将其解释为 JSON 对象的“_id”,并且合并他们的两个值。我通过将 "Id" 属性 重命名为其他名称来解决问题。
类有属性,BSON文档有字段。默认情况下,LiteDB 将所有 属性 名称转换为 BSON 文档中的相同名称,除了 _id
字段是文档标识符。
如果您想使用 Linq 进行查询,您将使用属性表达式。如果您使用 Query
对象 class,则必须使用字段名称。
var result = col.FindById(123);
// or
var result = col.FindOne(x => x.Id == 123);
// or
var result = col.FindOne(Query.EQ("_id", 123));
始终使用 _id
查找 returns 1(或零)个文档。