gpt4 book ai didi

c# - 尝试在 MongoDB MapReduce 调用中包含 Query

转载 作者:IT老高 更新时间:2023-10-28 13:33:36 25 4
gpt4 key购买 nike

我正在尝试创建一个非常基本的 map-reduce 示例,该示例还在 MapReduce api 调用中包含一个查询。

我的收藏有很多格式如下:

{ "_id" : { "$binary" : "PdYV4WMTAEyYMQHXJZfzvA==", "$type" : "03" }, 
"firstname" : "Matthew",
"surname" : "Chambers",
"email" : "" }

代码如下:

var map = @"
function() {
emit(this.surname, { count : 22 });
}";
var reduce = @"
function(key, emitValues) {
return { count : emitValues[0].count };
}";

List<BsonValue> contactIds = new List<BsonValue>();
contactIds.Add(new Guid("A04FC88D-7BF7-443D-B5C3-EB11EE2B36DF"));
contactIds.Add(new Guid("26B690B3-5ED7-47F4-A878-3906E28BBC58"));
MongoDB.Driver.Builders.QueryConditionList queryList = MongoDB.Driver.Builders.Query.In("_id", BsonArray.Create(contactIds));
//var mr = personCollection.MapReduce(map, reduce);// THIS WORKS!
var mr = personCollection.MapReduce(queryList, map, reduce); // THIS FAILS

如果我没有在 MapReduce 调用中包含 queryList,这一切都有效。但是,如果我确实包含了 queryList,那么我会收到以下运行时错误:

Command 'mapreduce' failed: db assertion failure (response: { "assertion" : "'out' has to be a string or an object", "assertionCode" : 13606, "errmsg" : "db assertion failure", "ok" : 0 }) at MongoDB.Driver.MongoDatabase.RunCommandAs[TCommandResult](IMongoCommand command) in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoDatabase.cs:line 621 at MongoDB.Driver.MongoCollection.MapReduce(BsonJavaScript map, BsonJavaScript reduce, IMongoMapReduceOptions options) in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoCollection.cs:line 788 at MongoDB.Driver.MongoCollection.MapReduce(IMongoQuery query, BsonJavaScript map, BsonJavaScript reduce) in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoCollection.cs:line 823 at HPSLucene.Models.Mongo.MapReduce() in C:\Inetpub\wwwroot\HPSLucene\HPSLucene\Models\Mongo.cs:line 158

有人知道问题出在哪里吗?非常感谢。

最佳答案

看起来它已将您的调用与您认为正在调用的不同重载相匹配

即您打算调用 (query, map, reduce) 重载,但实际上它正在调用 (map, reduce, options) 重载。这会给您错误,因为您的第三个参数不是有效的选项参数。

尝试使用以下重载:(查询、映射、归约、选项)然后它就会工作,不会混淆使用什么。

例如返回 M/R 内联的结果,而不是存储在集合中:

var mr = personCollection.MapReduce(queryList, map, reduce, 
MapReduceOptions.SetOutput(MapReduceOutput.Inline));

关于c# - 尝试在 MongoDB MapReduce 调用中包含 Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com