如何对匹配多个字段的所有文档进行分组 mongodb
How to group all documents matching for multiple fields mongodb
我是 MongoDB 的新手!
我只需要提取具有相同地址、类型和 ID 的所有文档。地址中将只有一个地址。其他属性可以有不同的值。例如,请参见下面的测试文档:
{
"Id" : "123",
"type" : "T1",
"addresses" : [
{
"address" : {
"line1" : "line 1 ...",
"line2" : "line 2...",
"state" : "state1...",
"city" : "city1...",
"zip" : "123456"
}
}
],
"email" : "test1@gmail.com",
"salary" : ""
}
例如我有以下文件,第一个值是类型,第二个是 ID,第三个是地址,第四个是电子邮件等等:
doc1 - t1 1 address1 email1 ...
doc2 - t1 2 address2 email2 ...
doc3 - t1 1 address1 email3 ...
doc4 - t1 1 address1 email4 ...
doc5 - t1 2 address2 email5 ...
doc6 - t1 1 address1 email6 ...
outcome: [ [doc1, doc3, doc4, doc6], [doc2, doc5] ]
此处的 doc1、doc3、doc4、doc6 具有相同的 ID、类型和地址。与 doc2、doc5 具有相同的 ID、类型和地址。
有人可以建议如何在 MongoDB 中实现这一目标吗?
阅读 Mongo 聚合框架和一些研发后,我能够使用以下方法实现此目的:
db.getCollection('test_collection').aggregate([
{
$group: {
_id: { type: "$type", id:"$Id", line1: "$addresses.0.address.line1" ... },
docGroups: { $addToSet: "$$ROOT" }
}
}
]);
我是 MongoDB 的新手!
我只需要提取具有相同地址、类型和 ID 的所有文档。地址中将只有一个地址。其他属性可以有不同的值。例如,请参见下面的测试文档:
{
"Id" : "123",
"type" : "T1",
"addresses" : [
{
"address" : {
"line1" : "line 1 ...",
"line2" : "line 2...",
"state" : "state1...",
"city" : "city1...",
"zip" : "123456"
}
}
],
"email" : "test1@gmail.com",
"salary" : ""
}
例如我有以下文件,第一个值是类型,第二个是 ID,第三个是地址,第四个是电子邮件等等:
doc1 - t1 1 address1 email1 ...
doc2 - t1 2 address2 email2 ...
doc3 - t1 1 address1 email3 ...
doc4 - t1 1 address1 email4 ...
doc5 - t1 2 address2 email5 ...
doc6 - t1 1 address1 email6 ...
outcome: [ [doc1, doc3, doc4, doc6], [doc2, doc5] ]
此处的 doc1、doc3、doc4、doc6 具有相同的 ID、类型和地址。与 doc2、doc5 具有相同的 ID、类型和地址。
有人可以建议如何在 MongoDB 中实现这一目标吗?
阅读 Mongo 聚合框架和一些研发后,我能够使用以下方法实现此目的:
db.getCollection('test_collection').aggregate([
{
$group: {
_id: { type: "$type", id:"$Id", line1: "$addresses.0.address.line1" ... },
docGroups: { $addToSet: "$$ROOT" }
}
}
]);