【问题标题】:Mongoid grouping over multiple embedded documents对多个嵌入文档的 Mongoid 分组
【发布时间】:2016-10-11 16:21:07
【问题描述】:

我有一些文件的结构大致如下:

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

我正在计算数组“stuff”和“enough”中的行数。我最初认为我可以通过 unwind 做一些事情,但如果我为每个嵌入的文档“人”和“动物”调用一次,那么我将一无所获。

我最终进行了单独的查询以获取每个内部“stuff”和“enough”数组的计数,但我想在一个查询中完成所有操作。

有谁知道我将如何获取每一个的计数,然后将它们放入单独的字段中,如“object_count”?

【问题讨论】:

    标签: mongodb mongoid


    【解决方案1】:

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

    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])
    

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

    【讨论】:

    • Hrm...实际上,我认为这有效,但轻便摩托车说“异常:无效运算符'$size'
    • 你有什么版本的mongo?
    • 我有 2.6.3 版,所以 $size 应该可以工作。我必须再多研究一下才能看到。
    • @unflores - 你能通过 mongo shell 检查查询吗?也可能驱动程序已过时?
    • 我直接在 mongo 中仔细检查了我列出的数据,我仍然收到 $size 的错误。另外,我意识到我最初列出的 db 结构是不正确的。我更新了它。我在想我可能会以某种方式进行投影,但 $size 给了我同样的错误。
    猜你喜欢
    • 2023-03-07
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多