使用以下文件:
{
_id: 123,
events: {
someEvent:{
created: ISODate("2015-06-27T16:51:03.000Z"),
metadata: {
some: "thing"
}
},
anotherEvent:{
created: ISODate("2015-06-27T16:51:01.000Z"),
metadata: {
some: "thing"
}
}
}
}
这是数据的简化示例。 events对象可以包含200到3,000个字段。有成千上万的这样的文件。
我希望在集合中使用mapreduce,因此我只返回集合中每个文档的一个事件(具有最新“创建日期”的事件)。
这可能吗?
答案 0 :(得分:2)
是的,这是可能的。 MapReduce是一把直刃剑"为此,但你的元素结构是不是很好"可能的3000个元素需要这样的东西:
NSDictionary *postDict = @{
@"UserPhone" : @"39399393",
@"firstName" : @"Manohar",
....
};
AFURLRequestSerialization *serializer = [AFURLRequestSerialization serializer];
NSString *urlString = @"https://YOUR_URL";
NSError *error = nil;
NSMutableURLRequest *request = [serializer requestWithMethod:@"POST"
URLString:urlString
parameters:postDict
error:error];
if (error) {
// check error
}
// Your custom http-header values
[request setValue:@"VALUE" forHTTPHeaderField:@"KEY"];
// send request
[NSURLConnection sendAsynchronousRequest:....];
所以基本上是圆柱形的,而且#34;事件"并在一定程度上重塑数据。然后你{"创建"} db.collection.mapReduce(
function() {
var doc = this;
var plucked = Object.keys(doc.events)
.map(function(key) {
var myObj = doc.events[key];
myObj.key = key;
return myObj;
})
.sort(function(a,b) {
return ( a.created > b.created )
? -1 : ( a.created < b.created )
? 1 : 0;
})[0];
emit(this._id, plucked);
},
function() {},
{ "out": { "inline": 1 } }
);
&#34; descencing order&#34;结果的关键然后拉第一个数组元素。
&#34;减速机&#34;这里什么也没做。但这只是服务器进行过滤的一种方式。