我想对一个集合进行分组,然后计算组中一个字段的平均值.
我设置我的数据库和内容,如下所示:
use testdb
db.bla.insert({"service": "A", "tet": "1"})
db.bla.insert({"service": "A", "tet": "100"})
db.bla.insert({"service": "A", "tet": "150"})
db.bla.insert({"service": "B", "tet": "10"})
db.bla.insert({"service": "B", "tet": "20"})
db.bla.insert({"service": "B", "tet": "25"})
Run Code Online (Sandbox Code Playgroud)
现在我想要所有服务"A"和"B"的数量以及所有服务"A"和"B"的平均tet.我试过这个:
db.bla.aggregate( { "$group": { _id: "$service", requests: { $sum:1}, averagetet: { $avg: "$tet"}}})
Run Code Online (Sandbox Code Playgroud)
但是这总是给我"0"的平均值.我在这里错过了什么?
我正在寻找一种方法来读取远程unix主机上快速增长的日志文件.
日志文件偶尔会获得一个logswitch(例如,再次从0字节开始).我无法直接在远程主机上处理日志文件的原因是处理器对主机施加了太多负载,这是不可能发生的.所以我需要在两个不同的主机上进行处理和读取.
由于我不在Java世界的家中,我想询问有关如何最好地实现这一目标的建议.
我的想法到目前为止:
让本地日志文件处理器(localhost)scp一个logfilereader(java二进制文件)到远程主机并启动它(通过本地日志文件处理器启动的ssh连接).然后,logfilereader开始读取/拖尾日志文件并将其作为TCP流提供(然后可以由本地日志文件处理器读取).
我很确定有更优雅的javastyle方法.谢谢你的任何提示.
我想编写一个简单的服务器来侦听端口并生成新线程来处理新连接.我试图使用try-with-resources来接受新连接但是失败了,因为子线程中的套接字似乎立即关闭,我不明白为什么.
这是2个简化的例子.
a)服务器的工作示例(没有try-with-resources):
package MyTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServerA implements Runnable {
private int port;
private ServerSocket serverSocket;
public MyServerA(Integer port) {
this.port = port;
}
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
} catch(IOException ioe) {
System.err.println("error opening socket. " + ioe.getStackTrace());
}
while (true) {
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
ClientServiceThread cliThread = new ClientServiceThread(clientSocket); …Run Code Online (Sandbox Code Playgroud)