我正在使用couchbase lite wpf项目。 我希望按日期约会。所以我用下面的代码创建了一个视图。
appointments.AddRange(App.StorageRepository.Query<AppointmentModel>(map, limit, offset, TodayWhere));
bool TodayWhere(IDictionary<string, object> accessDoc, IDictionary<string, object> parameters)
{
var tableName = parameters["table"].ToString();
if (!accessDoc["_id"].ToString().Contains(tableName))
{
return false;
}
var startDay = Convert.ToDateTime(accessDoc["startDate"].ToString());
var today = Convert.ToDateTime(parameters["today"].ToString());
if (startDay.Date != today.Date)
{
return false;
}
return true;
}
public List<T> Query<T>(IDictionary<string, object> map, int limit, int offset, Func<IDictionary<string, object>, IDictionary<string, object>, bool> monitoring)
{
List<T> list = new List<T>();
var viewName = map["view"].ToString();
var view = Manager.SharedInstance.GetDatabase(DatabaseName).GetView(viewName);
view.SetMap((doc, emit) =>
{
if (!monitoring(doc, map))
{
return;
}
emit(doc, null);
}, "1.0");
var query = view.CreateQuery();
query.Limit = limit;
query.Descending = true;
var queryResult =
query
.Run()
.ToList();
foreach (var item in queryResult)
{
var doc = GetObject<T>(item.Document.UserProperties);
list.Add(doc);
}
return list;
}
所以这段代码正常运行,但是存在问题。 例如。我在2016.05.06创建了视图。视图正确返回当天的约会。 但它今天也返回相同的数据。我不确定是什么问题。 我对View和查询感到困惑。 我不能像SQL视图一样使用视图吗?
答案 0 :(得分:1)
视图构建一个持久的静态索引。 View的map函数必须是纯函数,这意味着除了传入的文档之外,它不依赖于任何东西。如果你的map函数依赖于任何东西(比如当前日期),你将得到不一致的结果。看起来这可能是您案件中发生的事情。
Couchbase Lite的规则查看地图功能:
请参阅Couchbase Lite Views上的文档。