与map / reduce相似但反过来。 mongo是否有重新格式化数据的方法。我有一个以下格式的集合。
{
{"token-id" : "LKJ8_lkjsd"
"data": [
{"views":100, "Date": "2015-01-01"},
{"views":200, "Date": "2015-01-02"},
{"views":300, "Date": "2015-01-03"},
{"views":300, "Date": "2015-01-03"}
]
}
}
我想将整个集合处理成新格式。其中每个时间序列数据点是其文档映射到ID希望使用一些类似于map reduce的固有mongo功能。如果没有;我很欣赏我们可以做到这一点的策略。
{
{ "token-id" : "LKJ8_lkjsd", "views": 100, "Date" : "2015-01-01"},
{ "token-id" : "LKJ8_lkjsd", "views": 200, "Date" : "2015-01-01"},
{ "token-id" : "LKJ8_lkjsd", "views": 300, "Date" : "2015-01-01"}
}
答案 0 :(得分:3)
您需要汇总管道中的$unwind
see mongodb documentation
在您的情况下,代码将是
db.yourcollection.aggregate( [ { $unwind : "$data" } ] )
unwind
不会将文档单独插入新集合
您可以使用
> db.test.aggregate( [ { $unwind : "$data" }, {$project: {_id:0, "token-id":1, "data":1}}, {$out: "another"} ] )
> db.another.find()
在第一行中,您需要取消_id
,因为在$unwind
后您获得了具有相同_id
的4个文档(因此无法插入)
如果没有明确的_id
,则会自动生成新值
以下是我为您的示例获得的输出
{ "_id" : ObjectId("560599b1699289a5b754fab9"), "token-id" : "LKJ8_lkjsd", "data" : { "views" : 100, "Date" : "2015-01-01" } }
{ "_id" : ObjectId("560599b1699289a5b754faba"), "token-id" : "LKJ8_lkjsd", "data" : { "views" : 200, "Date" : "2015-01-02" } }
{ "_id" : ObjectId("560599b1699289a5b754fabb"), "token-id" : "LKJ8_lkjsd", "data" : { "views" : 300, "Date" : "2015-01-03" } }
{ "_id" : ObjectId("560599b1699289a5b754fabc"), "token-id" : "LKJ8_lkjsd", "data" : { "views" : 300, "Date" : "2015-01-03" } }
答案 1 :(得分:3)
aggregate命令可以将结果作为游标返回或存储 产生一个集合,不受大小限制。该 db.collection.aggregate()返回一个游标,可以返回结果集 任何规模的。
var result = db.test.aggregate( [ { $unwind : "$data" }, {$project: {_id:0, "token-id":1, "data":1}}])
for(result.hasNext()){
db.collection.insert(result.next());
}
答案 2 :(得分:3)
根据您对大数据集的提问,import javax.swing.*;
import java.awt.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import Main.SqlConnection;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.proteanit.sql.DbUtils;
import Main.Check;
import java.awt.Color;
import java.awt.event.KeyEvent;
在这种情况下查询的性能会降低,您应该在聚合中使用 $map 来处理{{1如下所示:
$unwind