如果一个字段匹配则合并记录,但如果另一个字段在两个记录中都有值则不合并 MongoDb 聚合
Merge records if one field matches, but not if another field has values in both records MongoDb aggregation
我有一些记录,例如:
{
id: 1,
phone: "+15555555555",
name: "Acme CO.",
vendorcode: "ACMEC"
},
{
id: 2,
phone: "+15555555555",
name: "Acme corporation company",
vendorcode: "ACMECOMPANY"
},
{
id: 3,
phone: "+15555555555",
name: "Acme Incorporated",
vendorcode: null
}
我要合并记录:
IF phone
字段匹配,合并记录。 (可以用要合并的下一条记录的值覆盖值)。
但如果多个记录中有 vendorcode
non-null 个值,则创建一个值数组。所以新记录中的“vendorcode”将是一个数组。
我希望上述 collection 的输出类似于:
{
phone: "+15555555555",
name: "Acme Co.",
vendorcode: ["ACMEC","ACMECOMPANY"]
}
在新 collection.
如何在 mongodb 中为此编写聚合?
$group
由 phone
、select 首先 name
、phone
$ifNull
将 return vendorcode
如果它不为 null
$addToSet
使数组唯一 vendorcode
$project
删除 _id
字段
$out
to write query result in new collection,这将创建一个新的集合并写入这个查询结果
db.collection.aggregate([
{
$group: {
_id: "$phone",
phone: { $first: "$phone" },
name: { $first: "$name" },
vendorcode: {
$addToSet: { $ifNull: ["$vendorcode", "$$REMOVE"] }
}
}
},
{ $project: { _id: 0 } },
{ $out: "newCollectionName" }
])
我有一些记录,例如:
{
id: 1,
phone: "+15555555555",
name: "Acme CO.",
vendorcode: "ACMEC"
},
{
id: 2,
phone: "+15555555555",
name: "Acme corporation company",
vendorcode: "ACMECOMPANY"
},
{
id: 3,
phone: "+15555555555",
name: "Acme Incorporated",
vendorcode: null
}
我要合并记录:
IF phone
字段匹配,合并记录。 (可以用要合并的下一条记录的值覆盖值)。
但如果多个记录中有 vendorcode
non-null 个值,则创建一个值数组。所以新记录中的“vendorcode”将是一个数组。
我希望上述 collection 的输出类似于:
{
phone: "+15555555555",
name: "Acme Co.",
vendorcode: ["ACMEC","ACMECOMPANY"]
}
在新 collection.
如何在 mongodb 中为此编写聚合?
$group
由phone
、select 首先name
、phone
$ifNull
将 returnvendorcode
如果它不为 null$addToSet
使数组唯一vendorcode
$project
删除_id
字段$out
to write query result in new collection,这将创建一个新的集合并写入这个查询结果
db.collection.aggregate([
{
$group: {
_id: "$phone",
phone: { $first: "$phone" },
name: { $first: "$name" },
vendorcode: {
$addToSet: { $ifNull: ["$vendorcode", "$$REMOVE"] }
}
}
},
{ $project: { _id: 0 } },
{ $out: "newCollectionName" }
])