我正在尝试进行一个非常简单的聚合来收集与特定所有者相关的一些索引。我的查询如下(用moped语法):
owners = Serials.collection.aggregate([
{'$group' => {
'_id' => '$owners.owner.party_name',
'serials' => { '$addToSet' => '$serial_number' }
}}])
这就是整个功能。问题在于' owner.owner'字段可以采用两种形式 - 它通常是嵌套数组,具有与记录关联的多个方名称。但是,它也可以是一个记录:
表格1:
"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"]}
在第二种情况下,结果将是相同的。