将文档的MongoDB字段合并到一个文档中
Merging MongoDB fields of documents into one document
我使用的是MongoDB 2.6.6
我在MongoDB集合中有这些文档,下面是一个例子:
{ ..., "field3" : { "one" : [ ISODate("2014-03-18T05:47:33Z"),ISODate("2014-06-02T20:00:25Z") ] }, ...}
{ ..., "field3" : { "two" : [ ISODate("2014-03-18T05:47:33Z"),ISODate("2014-06-02T20:00:25Z") ] }, ...}
{ ..., "field3" : { "three" : [ ISODate("2014-03-18T05:47:39Z"),ISODate("2014-03-19T20:18:38Z") ] }, ... }
我希望将这些文档合并到一个字段中。举个例子,我希望新的结果如下:
{ "field3", : { "all" : [ ISODate("2014-03-18T05:47:39Z"),ISODate("2014-03-19T20:18:38Z"),...... ] },}
我只是不知道怎么会有这样的结果!
这里没有留下太多内容,但可以说您可以使用mapReduce:获得这种合并结果
db.collection.mapReduce(
function() {
var field = this.field3;
Object.keys(field).forEach(function(key) {
field[key].forEach(function(date) {
emit( "field3", { "all": [date] } )
});
});
},
function (key,values) {
var result = { "all": [] };
values.forEach(function(value) {
value.all.forEach(function(date) {
result.all.push( date );
});
});
result.all.sort(function(a,b) { return a.valueOf()-b.valueOf() });
return result;
},
{ "out": { "inline": 1 } }
)
考虑到mapReduce自身的操作限制,它的输出格式并不完全相同:
{
"results" : [
{
"_id" : "field3",
"value" : {
"all" : [
ISODate("2014-03-18T05:47:33Z"),
ISODate("2014-03-18T05:47:33Z"),
ISODate("2014-03-18T05:47:39Z"),
ISODate("2014-03-19T20:18:38Z"),
ISODate("2014-06-02T20:00:25Z"),
ISODate("2014-06-02T20:00:25Z")
]
}
}
],
"timeMillis" : 86,
"counts" : {
"input" : 3,
"emit" : 6,
"reduce" : 1,
"output" : 1
},
"ok" : 1
}
由于这里聚合到单个文档中是相当任意的,所以您可能会认为您只是在客户端代码中采用了相同的方法。
无论如何,这只会对相对较小的数据集有用,并且对客户端处理有几乎相同的限制。超过了MongoDB的16MB BSON限制,但肯定受到内存消耗的限制。
所以我想你需要添加一个"查询"论点,但从你的问题中还不清楚。无论是使用mapReduce还是客户端代码,基本上都需要遵循这种过程来将数组"混合"在一起。
我个人会在这里使用客户端代码。
相关文章:
- 来自文档或下一个静态父级的事件委派
- 我该如何编写一个CouchDB视图,列出每个存储文档的大小
- 返回一个关联数组,而不是mongoose中的文档数组
- 猫鼬找到一个并推送到一排文档
- 谷歌应用程序脚本:如何修复循环将一个谷歌文档的段落插入另一个
- 将文档的MongoDB字段合并到一个文档中
- 当文档准备就绪时,将数据从一个文本框复制到另一个
- 有没有一种方法可以找到一个匹配两个不同填充的文档,并在findOne()中获取他的文档
- jQuery:在除一个输入文本字段之外的所有文档上激发keyup
- 从另一个浏览器访问一个浏览器中的html文档
- 查找系列中的下一个HTML文档
- 如何在一个字段中只提取6个值为true的文档
- window.opener调用函数给了我一个文档.getElementById(..)为null
- 将json作为子文档合并到另一个json中
- 使用JavaScript,我可以上传一个word文件并使用.replaces然后另存为新文档吗
- 从javascript打开一个word文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 为什么广播在文档中被描述为标志,而它实际上是一个对象
- 将href链接到另一个HTML文档中的锚点并将其居中
- (文档).ready是一个全局范围