【发布时间】:2019-02-13 20:28:49
【问题描述】:
给定以下结构的 MongoDB 集合
{
"_id" : 1,
"system_id" : "123",
"sub_systems" : [
{
"sub_system_id" : "456",
"status" : "connected",
"messages_relayed" : [ ] // An array of message_ids that have been relayed
}
]}
我想创建一个查询来返回每个sub_system 转发了多少消息。我从这个开始:
db.messages.aggregate([{
"$project": {
"_id": 0,
"num_of_msgs_relayed": {
"$cond":
{"if": { "$isArray": "$sub_systems.messages_relayed" },
"then": { "$size": "$sub_systems.messages_relayed" },
"else": 0}
}}}]);
令我惊讶的是,结果是:
{ "num_of_msgs_relayed" : 1 }
QUESTION:我希望查询返回 0 值,因为基本上我投影的是空数组的 $size!这 1 背后的原因是什么?
P.S.:以下命令可用于创建 messages 集合中显示的数据:
db.runCommand({ 插入:“消息”, 文件:[{'_id': 1, 'system_id': '123', 'sub_systems':[{'status': 'connected', 'messages_relayed': []}]}] } )
【问题讨论】:
-
$unwind然后$group和$sum。 docs.mongodb.com/manual/reference/operator/aggregation/sum/…