对多个嵌入式文档进行 Mongoid 分组

Mongoid grouping over multiple embedded documents

我有一些文档,大致结构如下:

{
 "_id": "derp",
  "name": "thing",
  "animal": {
    "_id": "abc",
    "stuff": [
      "blah",
      "wah"
    ]
  },
},
{
  "_id": "nerp",
  "person": {
    "_id": "bc",
    "enough": [
      "lah",
      "ah",
      "mwah"
    ]
  }
}

我正在计算数组 "stuff" 和 "enough" 中的行数。我最初想我可以用 unwind 做点什么,但如果我为每个嵌入文档调用一次,"person" 和 "animal",那么我将一事无成。

我最终做了单独的查询来获取 "stuff" 和 "enough" 的每个内部数组的计数,但我想在一个查询中完成所有这些。

有谁知道我将如何获取每个这些的计数,然后将它们放在单独的字段中,例如 "object_count"?

聊天和问题更新后 - 这是测试数据集上的工作解决方案:

var unwind = {
    $unwind : "$array"
}
var project = {
    $project : {
        _id : 1,
        array : {
            $cond : [{
                    $ne : ["$a", []]
                }, "$a", "$b"]
        }
    }
}

var group = {
    $group : {
        _id : "$_id",
        a : {
            $push : "$animal.stuff"
        },
        b : {
            $push : "$person.enough"
        }
    }
}
var group2 = {
    $group : {
        _id : "$_id",
        sum : {
            $sum : 1
        }
    }
}

db.info.aggregate([group, project, unwind, unwind, group2])

主要思想是将所有东西放入一个数组中,然后展开(因为我们正在推动,所以我们需要展开两次)最后计数。