对多个嵌入式文档进行 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])
主要思想是将所有东西放入一个数组中,然后展开(因为我们正在推动,所以我们需要展开两次)最后计数。
我有一些文档,大致结构如下:
{
"_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])
主要思想是将所有东西放入一个数组中,然后展开(因为我们正在推动,所以我们需要展开两次)最后计数。