gpt4 book ai didi

javascript - 对象字段上的 MongoDB Map Reduce

转载 作者:行者123 更新时间:2023-11-30 16:45:26 24 4
gpt4 key购买 nike

像这样的文档:

{
_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"
}
}
}
}

这是数据的简化示例。事件对象可以有 200 到 3,000 个字段。像这样的文件有成千上万。

我希望对集合使用 mapreduce,因此我只为集合中的每个文档返回一个事件(具有最新“创建”日期的事件)。

这可能吗?

最佳答案

是的,这是可能的。 MapReduce 对此有点“钝刃”,但您的元素结构“不是很好”并且可能的 3000 个元素需要这样的东西:

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

基本上,循环遍历“事件”并在某种程度上 reshape 数据。然后你 .sort() 在“降序”结果的“created”键上,只提取第一个数组元素。

“reducer”在这里什么都不做。但这只是服务器进行过滤的一种方式。

关于javascript - 对象字段上的 MongoDB Map Reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31313889/

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