小编Eri*_*nan的帖子

MongoDB按字段聚合存在

我很难相信这个问题还没有在某个地方被问过和回答,但是我找不到它的任何痕迹.

我有一个需要按布尔值分组的MongoDB聚合查询:是否存在另一个字段.

例如,让我们从这个集合开始:

> db.test.find()
{ "_id" : ObjectId("53fbede62827b89e4f86c12e"),
  "field" : ObjectId("53fbede62827b89e4f86c12d"), "name" : "Erik" }
{ "_id" : ObjectId("53fbee002827b89e4f86c12f"), "name" : "Erik" }
{ "_id" : ObjectId("53fbee092827b89e4f86c131"),
  "field" : ObjectId("53fbee092827b89e4f86c130"), "name" : "John" }
{ "_id" : ObjectId("53fbee122827b89e4f86c132"), "name" : "Ben" }
Run Code Online (Sandbox Code Playgroud)

2个文件有"字段",2个没有.注意,"field"的每个值可能不同; 我们只想对它的存在进行分组(或者非null也适用于我,我没有存储任何空值).

我已经尝试过使用$ project,但是$ exists不存在,$ cond和$ ifNull没有帮助我.该字段似乎总是存在,即使它不存在:

> db.test.aggregate(
  {$project:{fieldExists:{$cond:[{$eq:["$field", null]}, false, true]}}},
  {$group:{_id:"$fieldExists", count:{$sum:1}}}
)
{ "_id" : true, "count" : 4 }
Run Code Online (Sandbox Code Playgroud)

我希望以下更简单的聚合工作,但由于某种原因,$ exists不支持这种方式:

> db.test.aggregate({$group:{_id:{$exists:"$field"}, count:{$sum:1}}})
assert: command failed: {
  "errmsg" : "exception: invalid …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

40
推荐指数
8
解决办法
4万
查看次数

MongoDB内存不足

MongoDB崩溃了.当我打开mongodb.log文件时,我得到:

$ tail /var/log/mongodb/mongodb.log
Sat Jan 25 03:06:56.153 [initandlisten] connection accepted from 127.0.0.1:58492 #63331 (263 connections now open)
Sat Jan 25 03:07:02.694 out of memory, printing stack and exiting:
0xde05e1 0x6cf37e 0x12129fd 0xc490c3 0xc4404e 0xc44196 0xda4913 0xda53e4 0xe28e69 0x7f5cbaa19e9a 0x7f5cb9d2c3fd 
 /usr/bin/mongod(_ZN5mongo15printStackTraceERSo+0x21) [0xde05e1]
 /usr/bin/mongod(_ZN5mongo14my_new_handlerEv+0x3e) [0x6cf37e]
 /usr/bin/mongod(_Znam+0x6d) [0x12129fd]
 /usr/bin/mongod(_ZNK5mongo3Top8cloneMapERNS_9StringMapINS0_14CollectionDataEEE+0x83) [0xc490c3]
 /usr/bin/mongod(_ZN5mongo9Snapshots12takeSnapshotEv+0x4e) [0xc4404e]
 /usr/bin/mongod(_ZN5mongo14SnapshotThread3runEv+0x66) [0xc44196]
 /usr/bin/mongod(_ZN5mongo13BackgroundJob7jobBodyEN5boost10shared_ptrINS0_9JobStatusEEE+0xc3) [0xda4913]
 /usr/bin/mongod(_ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf1IvN5mongo13BackgroundJobENS_10shared_ptrINS7_9JobStatusEEEEENS2_5list2INS2_5valueIPS7_EENSD_ISA_EEEEEEE3runEv+0x74) [0xda53e4]
 /usr/bin/mongod() [0xe28e69]
 /lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a) [0x7f5cbaa19e9a]
 /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f5cb9d2c3fd]
Run Code Online (Sandbox Code Playgroud)

这个问题听起来很相似:MongoDB:内存不足 但他的问题是一个极端问题.我的记忆设置已经无限制.

其他人对.skip()或.limit()的特殊问题给出了不合理的大值,但这并没有发生在这里.

谁知道可能出错了什么?

out-of-memory azure swapfile mongodb

6
推荐指数
1
解决办法
1356
查看次数