Couchbase lite .net多个密钥

时间:2017-10-24 09:25:11

标签: c# .net couchbase

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

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

这也行不通......我做错了什么?

Ty&amp; BR 汉纳斯

1 个答案:

答案 0 :(得分:1)

第一

您是否尝试过无钥匙或(开始键和结束键)以确定您是否成为某种东西?

为什么它不起作用

Ps:根据整理原则,使用start endkey的查询无法正常工作,因为liste的第一个元素应该是doc._id,否则响应将为空。

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

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

应该有效的示例(在我重写之后未经过测试才能发布)

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