Xamarin.Android Couchbase.Lite Map Reduce

时间:2016-01-04 18:39:32

标签: couchbase-lite

我只想创建一个使用Map-Reduce的View来执行此操作:假设我有汽车行业的文档。我希望用户查询特定的Make - 例如福特。我希望用户通过EditText,Tap a Button和" Count"来提供Ford值。在TextView中显示。因此,为了澄清,我想使用Map-Reduce计算某种类型的Document。我已经搜索了超过100个小时,并没有找到一个单一的例子 - 我的意思是真实的例子。 (我已阅读所有文档,只有通用示例 - 没有实际示例) 我是一名经验丰富的程序员,年龄超过15岁 - 我只需要一个例子,我很高兴。 有人可以帮我这个吗? 谢谢, 唐

2 个答案:

答案 0 :(得分:1)

Here is my Actual Code:
string lMS = "MS:5"; // just to show what type of value I am using
var msCount = dbase.GetView ("count_ms");
msCount.SetMapReduce ((doc, emit) => {
    if (doc.ContainsKey ("DT") && doc["DT"].Equals ("P")) {
        if (doc.ContainsKey ("MS") && doc["MS"].Equals (_ms))
        {
            emit (doc ["id"], 1);
        }
    }
},
(keys, values, rereduce) => values.ToList().Count, "1");

var mscView = dbase.GetView ("count_ms");
var query = mscView.CreateQuery ();
query.StartKey = "MS:1";
query.EndKey = "MS:9999";
var queryResults = query.Run ();

var nr = queryResults.Count;  // shows a value of 1 - wrong - should be 40

// the line below is to allow me to put a stop statement to read line above
var dummyForStop = nr; 

答案 1 :(得分:0)

尝试设置类似

的内容
        var docsByMakeCount = _database.GetView("docs_by_make_count");
        docsByMakeCount.SetMapReduce((doc, emit) =>
        {
            if (doc.ContainsKey("Make"))
            {
                emit(doc["Make"], doc);
            }
        },
        (keys, values, rereduce) => values.ToList().Count
        , "1");

创建视图时。

当你使用它时:

        var docsByMake = _database.GetView("docs_by_make_count");
        var query = docsByCity.CreateQuery();

        query.StartKey = Make;
        query.EndKey = Make;

        var queryResults = query.Run();

        MessageBox.Show(string.Format("{0} documents has been retrieved for that query", queryResults.Count));

        if (queryResults.Count == 0) return;

        var documents = queryResults.Select(result => JsonConvert.SerializeObject(result.Value, Formatting.Indented)).ToArray();
        var commaSeperaterdDocs = "[" + string.Join(",", documents) + "]";

        DocumentText = commaSeperaterdDocs;

在我的案例中,Make和DocumentText是属性。

这里有一些优化,比如减少,但这是直截了当的。