每份文件都描述了客户协议(决定,不是价值),简体:
{
"_id": "123",
"customerID" : "Smith"
"agreement": [
{"agreementType":"A"
"agreementValue":"T"},
{"agreementType":"B"
"agreementValue":"T"}]
}
{
"_id": "124",
"customerID" : "Smith"
"agreement": [
{"agreementType":"A"
"agreementValue":"F"},
{"agreementType":"B"
"agreementValue":"T"}]
}
{
"_id": "125",
"customerID" : "Brown"
"agreement": [
{"agreementType":"A"
"agreementValue":"T"},
{"agreementType":"B"
"agreementValue":"T"}]
}
{
"_id": "126",
"customerID" : "Brown"
"agreement": [
{"agreementType":"A"
"agreementValue":"T"},
{"agreementType":"B"
"agreementValue":"T"}]
}
我需要查询所有具有相同协议类型的不同协议值的客户(例如,单个客户同意但第二天不同意)。 它应该返回 Smith(agreementType=A 的不同值)。
目前我可以找到所有重复项,但不能仅限于具有不同值的那些
您可以
$unwind
agreement
数组并执行$group
以获得agreementValue
的不同值。 $match
$size
大于 1 以获得所需的记录。
db.collection.aggregate([
{
"$unwind": "$agreement"
},
{
"$group": {
"_id": {
"customerID": "$customerID",
"agreementType": "$agreement.agreementType"
},
"agreementValues": {
"$addToSet": "$agreement.agreementValue"
}
}
},
{
$match: {
$expr: {
$gt: [
{
$size: "$agreementValues"
},
1
]
}
}
},
{
$group: {
_id: "$_id.customerID"
}
}
])