我有一个包含数百万行的mongoDB集合,我正在尝试优化我的查询.我目前正在使用聚合框架来检索数据并根据需要对它们进行分组.我的典型聚合查询类似于:$match > $group > $ group > $project
但是,我注意到最后的部分只花了几毫秒,开始是最慢的.
我尝试仅使用$ match过滤器执行查询,然后使用collection.find执行相同的查询.聚合查询需要大约80毫秒,而查询查询需要0或1毫秒.
我几乎每个字段都有索引,所以我想这不是问题.什么可能出错?或者它只是聚合框架的"正常"缺点?
我可以使用查找查询而不是聚合查询,但是我必须在请求之后执行大量处理,并且这个过程可以快速完成$group等等,所以我宁愿保留聚合框架.
谢谢,
编辑:
这是我的标准:
{
"action" : "click",
"timestamp" : {
"$gt" : ISODate("2015-01-01T00:00:00Z"),
"$lt" : ISODate("2015-02-011T00:00:00Z")
},
"itemId" : "5"
}
Run Code Online (Sandbox Code Playgroud) 让我快速解释一下我要做什么。我正在尝试用 Java 构建我自己的 Apple 推送通知服务(用于测试目的)。这项服务的工作归功于 TLS 套接字。
我有一个 java 客户端来创建一个 TLS 套接字来向 APNs 发送推送通知。我更改了主机 url 以将套接字重定向到 localhost:2195。现在我正在尝试编写一个 java 套接字服务器来获取通知请求。
但是,我在握手过程中遇到异常并且无法找到解决方法。
注意:我在双方使用相同的证书,它是一个标准的 .p12 文件,用于向 APNs 发送推送通知。
这是客户端(简化):
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(certificatePath), password.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
kmf.init(ks, password.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
tmf.init((KeyStore)null);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory ssf = sc.getSocketFactory();
SSLSocket socket = (SSLSocket) ssf.createSocket(InetAddress.getLocalHost(), 2195);
socket.startHandshake();
Run Code Online (Sandbox Code Playgroud)
这是服务器:
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(certificatePath), password.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
kmf.init(ks, password.toCharArray());
SSLContext context = SSLContext.getInstance("TLS"); …Run Code Online (Sandbox Code Playgroud) 我正在使用Mac OS X 10.9(Mavericks).我最近不得不使用CMake和OpenMP库编译代码.所以刚开始我下载的XCode命令行工具用xcode-select --install.这是问题所在:XCode使用的clang编译器没有带来OpenMP.所以我得到gcc-4.9了brew包管理器(GCC有OpenMP库).
它工作正常,但使用它的命令是gcc-4.9和CMake调用cc命令.所以我搜索了一下,发现这/usr/bin/cc是一个象征性的链接/usr/bin/clang.我决定改成它/usr/bin/gcc,但问题是:我不知道这个文件是什么...
它看起来像clang命令文件:如果我没有任何参数运行它,我得到clang错误而不是gcc错误:
$ gcc
clang: error: no input files
$ gcc-4.9
gcc-4.9: fatal error: no input files
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
但它不是一个符号链接......这是一个ls -l命令的结果:
-rwxr-xr-x 1 root wheel 14224 23 oct 07:40 gcc
Run Code Online (Sandbox Code Playgroud)
(看起来它是在我进行Mavericks升级时创建的)对于g ++而言它完全相同.它是一种铿锵的副本,有不同的名字吗?Apple为什么不使用符号链接?
所以,如果有人知道我是否可以删除这些文件以放置符号链接而没有任何问题(或更好的解决方案),请告诉我!
谢谢 :)
这是我的问题:在我的Mongo数据库中,我有一个包含以下项目的集合:
{
'id': 1,
'steps': [
{
action: 'start',
info: 'foo'
},
{
action: 'stop',
info: 'bar'
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想得到'开始'的步骤总数.我尝试使用MongoDB聚合框架:我使用$unwindon steps.action和$matchon steps.action来匹配'start'.
但是,我获得了太多数据并达到了聚合的限制:
exception: aggregation result exceeds maximum document size (16MB).我不需要数据,我只想要数,但我找不到怎么做(尝试使用$ group但没有成功).
提前致谢,