相关问题是在sql server中有效地将行转换为列.但答案是针对SQL的.
我想要相同的结果,即将行转移到列而不聚合MongoDB中的任何内容(截至目前).
该系列看起来如下所示.这些是Facebook页面属性的统计信息:
timestamp | propName | propValue -------------------------------- 1371798000000 | page_fans | 100 -------------------------------- 1371798000000 | page_posts | 50 -------------------------------- 1371798000000 | page_stories | 25 --------------------------------
我需要回答:
timestamp | page_fans | page_posts | page_stories -------------------------------- 1371798000000 | 100 | 50 | 25 --------------------------------
列名称是预先确定的.它们不必动态生成.但问题是如何在MongoDB中实现这一目标.
我认为聚合对此没有用处.我需要使用MapReduce吗?但在那种情况下,我猜没有什么可以减少的?另一种选择可能是在代码中获取这些值,并使用编程语言(例如Java)进行操作
任何见解都会有所帮助.提前致谢 :)!!!
编辑(根据Schaliasos的输入):
输入JSON:
{
"_id" : ObjectId("51cd366644aeac654ecf8f75"),
"name" : "page_storytellers",
"pageId" : "512f993a44ae78b14a9adb85",
"timestamp" : NumberLong("1371798000000"),
"value" : NumberLong(30871),
"provider" : "Facebook"
}
{
"_id" : ObjectId("51cd366644aeac654ecf8f76"),
"name" : "page_fans", …Run Code Online (Sandbox Code Playgroud) 我创建了MySQL DB Schema,并且我使用Hibernate Reverse Engineering文件来创建带注释的域对象(.java).虽然文件生成正确,但它在某种程度上缺少ID字段的"Generator"注释.
下面是我的hibernate.reveng.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE
hibernate-reverse-engineering PUBLIC
"-//Hibernate/Hibernate Reverse
Engineering DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd"
<hibernate-reverse-engineering>
<table-filter match-name="products" match-catalog="test"></table-filter>
<table catalog="test" name="products">
<primary-key>
<generator class="native"></generator>
<key-column name="product_id"property="product_id" />
</primary-key>
</table>
</hibernate-reverse-engineering>
Run Code Online (Sandbox Code Playgroud)
和生成的类文件(Products.java):
// default package
// Generated Jan 21, 2011 8:27:16 PM by Hibernate Tools 3.3.0.GA
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Products generated by hbm2java
*/
@Entity
@Table(name = "products", catalog = "test")
public class Products implements java.io.Serializable {
private String productId; …Run Code Online (Sandbox Code Playgroud) 我们已经创建了一个测试套件,为了运行它,我们使用嵌入式Grizzly Web Server和JerseyTest框架.
我们正在从JerseyTest扩展一个自定义类,并在其构造函数中创建ApplicationDescriptor,然后调用超类setupTestEnvironment(),它实质上启动了嵌入式的grizzly Web服务器.
我们的测试用例很少扩展此自定义类以直接启动grizzly服务器.但是,我们不会在代码中的任何位置停止此嵌入式服务器.
测试用例在Windows上运行良好,但在Unix上,它们失败,java.net.BindException端口9998正由另一个进程使用.
很明显,如果我们不在代码中停止嵌入式Web服务器,这些测试也会在Windows上出现类似错误.它们如何在Windows上正常运行并且在unix上失败.这与Unix如何产生线程或进程有关吗?
PS我们还测试了使用netstat -a |的其他进程是否正在使用端口9998 grep 9998但没有找到使用该端口的其他进程.
我们使用JTable显示数据以及状态(新建,已处理,已关闭).每个状态行都有不同的颜色,这是通过重载JTable的prepareRenderer()来实现的.
现在我们需要对该表进行排序,我们正在使用table.setAutoCreateRowSorter(true); 实现这一目标.行正确排序,但行的颜色保持不变.我们需要根据状态列在此操作之后将颜色重新应用于所有行.
我想知道什么是实现这一目标的最佳方法.我可以通过以下几种方式思考:
我不知道该怎么做.任何人都可以提供一个洞察力,了解实现这一目标的正确方法是什么?
我已经在类中的单个方法中初始化了一个InputStream,并将其传递给下一个方法进行处理。InputStream本质上封装了用于处理的CSV文件。
另一种方法调用传入同一 InputStream 的 2 个不同方法,一个用于检索标头,另一个用于处理内容。该结构如下所示:
main() {
FileInputStream fis = new FileInputStream("FileName.CSV");
BufferedInputStream bis = new BufferedInputStream(fis);
InputStreamReader isr = new InputStreamReader(bis);
processCSV(isr);
}
processCSV(Reader isr) {
fetchHeaders(isr);
processContentRows(isr);
}
fetchHeaders(Reader isr) {
//Use BufferedReader to retrieve first line of CSV
//Even tried mark() and reset() here
}
processContentRows(Reader isr) {
//Cannot read the values, fetches null from InputStream :(
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么吗?有什么方法可以在不同的方法调用之间重用 InputStream 吗?
我正在提出可以模拟以下问题的完整程序:
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class MarkResetTest
{
public static …Run Code Online (Sandbox Code Playgroud)