如何在 couchbase lite 中使用查询

How to use query in couchbase lite

我正在从事 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 中创建了视图。正确查看当天的 returns 约会。 但它 returns 今天也有同样的数据。我不确定哪里出了问题。 我对查看和查询感到困惑。 我不能使用像 SQL view table?

这样的视图

视图构建一个持久的静态索引。 View 的 map 函数必须是纯函数,这意味着它只能依赖于传入的文档。如果您的 map 函数依赖于任何东西(例如当前日期),您将得到不一致的结果。您的情况可能就是这样。

Couchbase Lite View 地图功能的规则:

  • 它必须是一个 "pure" 函数:这意味着任何时候用相同的输入调用它,它必须产生完全相同的输出。换句话说,它不能使用任何外部状态,只能使用它的输入 JSON.
  • 它不能有副作用:它不应该改变任何外部状态,因为它在何时被调用、被调用的频率或文档传递给它的顺序是不可预测的。
  • 它必须是线程安全的:它可以在属于索引器的后台线程上调用,甚至可以同时在多个线程上并行调用。

请参阅 Couchbase Lite Views 上的文档。