0

我在 C# 中编写了一个从 mongoDB 检索推文的方法,并希望按转推数对作者进行计数和排序。

现在,该方法已经执行了 map 和 reduce 并通过以下方式返回未排序的结果:

public void RetweetsCount()
        {
            string wordMap = @"function wordMap() {

                            var usernameOrigin = this.text.match(/\brt\s*@(\w+)/i);

                            if (usernameOrigin === null) {
                                return;
                            }

                            // loop every word in the document
                            emit(usernameOrigin[1], { count : 1 });
                        }";

            string wordReduce = @"function wordReduce(key, values) {
                            var total = 0;
                            for (var i = 0; i < values.length; i++) {
                                total += values[i].count;
                            }
                            return { count : total };
                        }";

            var options = new MapReduceOptionsBuilder();
            options.SetOutput(MapReduceOutput.Inline);




            var results = collection.MapReduce(wordMap, wordReduce, options);

            foreach (var result in results.GetResults())
            {
                Console.WriteLine(result.ToJson());
            }
        }

有谁知道如何通过递减计数值(转推数)对结果进行排序?

4

1 回答 1

2

这是解决方案。从 MapReduce 检索结果后,我首先将 IEnumerable 转换为列表,然后按以下方式对列表进行排序:

            var results = collection.MapReduce(wordMap, wordReduce, options);
            IEnumerable<BsonDocument> resultList = results.GetResults();
            List<BsonDocument> orderedList = resultList.ToList().OrderByDescending(x => x[1]).ToList();
于 2013-01-27T13:09:31.527 回答