Lite DB没有找到内部对象查询

时间:2016-02-17 22:29:48

标签: bson litedb nosql

我有两个对象。

 [DataContract]
 public class Record
 {
    [DataMember]
    public string Id { get; set; }
 }

这节课:

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();

测试以with对象返回,但结果值不返回。 Lite DB仅使用Query或BSONId作为删除对象的方法。我没有附加BSON ID(它是一个引用的定义,因此我无法更改它)。

如何使用“查询”功能获取嵌套值,以便删除它?

2 个答案:

答案 0 :(得分:2)

类具有属性,BSON文档具有字段。默认情况下,LiteDB将所有属性名称转换为BSON文档中的相同名称,除了作为文档标识符的$( document ).ready(function() { $("#date").datepicker({ dateFormat: "dd.mm.yy" }); }); 字段。

如果您想使用Linq进行查询,则将使用属性表达式。如果您使用的是_id对象类,则必须使用字段名称。

Query

使用var result = col.FindById(123); // or var result = col.FindOne(x => x.Id == 123); // or var result = col.FindOne(Query.EQ("_id", 123)); 查找始终返回1(或零)文档。

答案 1 :(得分:1)

我弄清楚了LiteDB的问题,因为我使用了属性名称“Id”,BSON将其解释为JSON对象的“_id”,并合并它们的两个值。我通过将“Id”属性重命名为其他内容来解决问题。