我有一种情况,我想查找所有具有不同交易ID的相同值的文档。如果该值存在于同一个transactionID的两个文档中,则不应打印这些文档。 以下是一些示例文档。
Document 1:
{
"_id" : 1,
"trxId" : “abcd”,
“transactionID” : “1234”,
“Value” : “abcd1234hjgn”
}
Document 2:
{
"_id" : 2,
"trxId" : “efgh”,
“transactionID” : “5678”,
“Value” : “abcd”
}
Document 3:
{
"_id" : 1,
"trxId" : “ijkl”,
“transactionID” : “12345”,
“Value” : “abcd1234hjgn”
}
Document 4:
{
"_id" : 1,
"trxId" : “abcd”,
“transactionID” : “1234”,
“Value” : “abcd1234hjgn”
}
该查询应仅打印文档1和文档2,因为对于两个不同的transactionID,存在“值”:“ abcd1234hjgn”。 结果应该在下面。我该怎么做?
{
"_id" : 1,
"trxId" : “abcd”,
“transactionID” : “1234”,
“Value” : “abcd1234hjgn”
}
{
"_id" : 1,
"trxId" : “ijkl”,
“transactionID” : “12345”,
“Value” : “abcd1234hjgn”
}
答案 0 :(得分:0)
这是一个漫长的过程,但是可以达到结果。
db.getCollection("stackoverflow").aggregate(
// Pipeline
[
// Stage 1
{
$group: {
_id: '$Value',
records: {
$push: {
trxId: '$trxId',
transactionID: '$transactionID',
Value: '$Value',
_id: '$_id'
}
}
}
},
// Stage 2
{
$addFields: {
duplicates: {
$size: "$records"
}
}
},
// Stage 3
{
$match: {
duplicates: {
$gt: 1
}
}
},
// Stage 4
{
$unwind: {
path: "$records"
}
},
// Stage 5
{
$project: {
_id: '$records._id',
transactionID: '$records.transactionID',
Value: '$records.Value',
trxld: '$records.trxId'
}
},
]
);