【问题标题】:Couchbase lite .net multiple keysCouchbase lite .net 多键
【发布时间】:2017-10-24 09:25:10
【问题描述】:

也许我不是第一个提出这个问题的人,但我还没有找到这个问题的答案。 我创建了一个发出多个键的视图:

ParametersByTestCase.SetMap(
(doc, emit) =>
{
if (!doc[“Type”].ToString().Equals(TestCaseModel.TYPE)) return;
var keys = new List<object>
{
doc["_id"],
doc[“TestDefId”]
};
emit(keys, doc[“Params”]);
},
“1.0”);

现在我想查询某个键,但没有得到任何结果。从论坛我找到了这个解决方案:

var key = new List { testDefId };
var keys = new List<object> { key };
query.Keys = keys;
query.Run();

它总是不返回任何结果(并且键肯定在索引中)。

我发现的另一种方法是:

query.StartKey = new List<object> { testDefId };
query.EndKey = new List<object> { testDefId, new Dictionary<string, object>() };
query.Run();

这也不起作用……我做错了什么?

泰和巴西 汉内斯

【问题讨论】:

    标签: c# .net couchbase


    【解决方案1】:

    首先

    你有没有试过不带钥匙或(startkey和endkey)看看你是否变成了某样东西?

    为什么它不能工作

    Ps :根据排序规则,您使用 start endkey 的查询无法正常工作,因为您的列表的第一个元素应该是 doc._id 否则响应将为空。

    https://wiki.apache.org/couchdb/View_collation

    对于键查询,您有相同的 pb。第一个应该是 doc._id 问题是你声明了一个像这样的键 new List(){ "a", "b"} 所以在键中你应该写这样的 new List(){ new List(){"a", "b" }}}。 键是 2 个元素的列表,应该是键列表(即列表)

    应该可以工作的例子(在我重写后没有测试过)

    var view = database.GetView("spongbob");
    view.SetMap((doc, emit) =>
    {
    if (doc["Type"] == "spongbob")
    {
    emit(new object[]{ doc["_id"],doc["strength"] }, doc);
    }
    }, "1.0");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多