我正在尝试进行一个非常简单的聚合来收集与特定所有者相关的一些索引。我的查询如下(以轻便摩托车语法):
owners = Serials.collection.aggregate([
{'$group' => {
'_id' => '$owners.owner.party_name',
'serials' => { '$addToSet' => '$serial_number' }
}}])
这就是整个功能。问题是“owners.owner”字段可以采用两种形式——它通常是一个嵌套数组,有多个与记录相关联的参与方名称。但是,它也可以是单个记录:
表格一:
"owners": {
"owner": [
{
"entry_number": "1",
"party_name": "Company Name, LLC",
"other_fields": "other info",
},
{
"entry_number": "1",
"party_name": "Company Name, LLC",
"other_fields": "other info",
}
]
},
(是的,通常这些条目在数组中重复。有时它是两个或多个不同的所有者。)
表格 2:
"owners": {
"owner": {
"entry_number": "1",
"party_name": "Another Company, Inc.",
"other_fields": "other_info",
}
},
请注意,在这种情况下,它没有嵌入到数组中。因此,我不确定聚合过程中的 $unwind 步骤是否有效,因为没有嵌入数组的文档会返回错误。
所以无论如何,聚合产生记录的结果如下所示:
{"_id"=>["Random co.", "Random co."], "serials"=>["12345678"]}
但也有如下所示的记录:
{"_id"=>["Company 1 co.", "Company 2 co."], "serials"=>["12345679", "12345778", "14562378", "87654321", "33822112", "11111111"]}
即“party_name”字段有时是唯一的,但有时是两个或多个不同的字符串。
我的问题是,如何进一步细化此聚合以从“_id”字段中删除重复的字符串,并且只保留不同的值?
因此,例如,在第一种情况下,结果将是:
{"_id"=>["Random co."], "serials"=>["12345678"]}
而在第二种情况下,结果将是相同的。