如何解决Mongo汇总:删除空文档并返回不同的结果
我正在查询相当大的馆藏(2000万条记录以上)。我只需要提取特定的字段值,并且我还想从结果中删除空文档(没有任何相关值的文档),并按其他方式分组/查找以仅返回唯一文档对象,减少返回的记录量。
假设收集数据如下:
{
"_id" : ObjectId("5d4d81f1f7453b000734c603"),"name" : "question_group","questions" : [
{
"question_other_field": "testing"
}
{
"question_type" : "newbie","question_value" : "how to query data"
},{
"question_type" : "newbie","question_value" : "how to query data","question_metadata" : {
"question_subject_name" : "Mongo"
}
},"question_other_field": "testing"
"question_metadata" : {
"question_subject_name" : "Mongo"
}
},{
"question_type" : "expert","question_value" : "how not to query data","question_timestamp" : 1556854333,"question_metadata" : {
"question_subject_name" : "Mongo","question_answer_id" : "19247100","question_answer_events" : {
"attitude" : "helpful","result" : "success"
}
}
}
]
}
对于某些记录,问题数组为空,如果不是,则有时存在某些内部字段和对象,有时则不存在。我想查询整个集合并仅导出这些字段的值:
questions.question_type
questions.question_value
questions.question_metadata.question_subject_name
questions.question_metadata.question_answer_events.attitude
questions.question_metadata.question_answer_events.result
如果这些字段中的任何一个为空白或不存在,则可以。但是,如果所有字段都为空,则我想省略该行;我不希望文档返回零字段。最后,再次,因为它是一个大集合,我想返回不同的值,因此,如果两个或多个结果文档的上述五个字段的所有五个值都具有相同的五个值,我希望将它们分组为一行。 (我真的不需要计算每个组中的数量,尽管也许再加上一点也可以。)
根据我上面给出的示例数据的小样本,这是我理想中希望返回到导出的内容。有三个结果;上面的第一条记录不在结果中,因为它不包含我要查找的任何字段,第三条和第四条被合并为一行,因为尽管它们不同,但其中的一个查询字段没有区别。 / p>
question_type: "newbie"
question_value: "how to query data"
question_subject_name:
attitude:
result:
question_type: "newbie"
question_value: "how to query data"
question_subject_name: "Mongo"
attitude:
result:
question_type: "expert"
question_value: "how not to query data"
question_subject_name: "Mongo"
attitude: helpful
result: success
我是Mongo和查询的新手,这是到目前为止我能想到的最好的方法:
db.myCollection.aggregate([
{
$match: {
questions: {
$ne: []
}
}
},{
$unwind: "$questions"
},{
$project: {
"_id": 0,question_type: "$questions.question_type",question_value: "$questions.question_value",question_subject_name: "$questions.question_metadata.question_subject_name",question_answer_events: "$questions.question_metadata.question_answer_events"
}
},{
$project: {
"_id": 0, question_type: "$question_type",question_value: "$question_value",question_subject_name: "$question_subject_name", attitude: "$question_answer_events.attitude", result: "$question_answer_events.result", }
}
])
如果$ unwind已经消除了没有问题数组的行,则$ match和$ unwind可能是多余的,但是我不确定。此外,通过此查询,我得到的结果不明显(因为我不知道如何),并且返回的行中有零个字段,这暗示(可能正确)暗示原始行有一个问题数组,但集合完全不同字段。
对于这个前潜伏者,任何帮助都将不胜感激!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。