У меня есть конвейер агрегации в mongoDB, который возвращает три случайные записи, но я не хочу, чтобы какие-либо значения для этих записей были одинаковыми. Например, я не хочу, чтобы два экземпляра TransactionDetail говорили «foo», даже если они из разных записей. как я могу этого достичь?
Используется запрос mongoDB
db.TABLE.aggregate([{$match: { pid:{$ne:00000021}, transactionDetail:{$ne:null} }}, {$limit: 100}, {$sample: { size: 3 }}, {$project: { transactionDetail:1, _id: 0 }}])
Пример данных выглядит следующим образом
{ "_id" : ObjectId("5da92bb0b3507b13a8d63556"), "pid" : 00000001, "transactionDate" : "2019-10-10 13:05:00", "transactionValue" : 0.00, "transactionDetail" : "HOME & THINGS-C/SPRING RO", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb0b3507b13a8d63557"), "pid" : 00000002, "transactionDate" : "2019-10-10 06:15:29", "transactionValue" : 0.00, "transactionDetail" : "JUICI PATTIES - LIGUANEA ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb0b3507b13a8d63558"), "pid" : 00000003, "transactionDate" : "2019-10-10 10:52:32", "transactionValue" : 0.00, "transactionDetail" : "MATILDA'S CORNER PHARMACY", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb0b3507b13a8d63559"), "pid" : 00000004, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : null, "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d6355a"), "pid" : 00000005, "transactionDate" : "2019-10-11 00:00:00", "transactionValue" : 0.00, "transactionDetail" : null, "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d6355b"), "pid" : 00000006, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : null, "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d6355c"), "pid" : 00000007, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : null, "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d6355d"), "pid" : 00000008, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : "COURTS - CONSTANT SP RD ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d6355e"), "pid" : 00000009, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : "COURTS - CONSTANT SP RD ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d6355f"), "pid" : 00000010, "transactionDate" : "2019-10-10 13:14:44", "transactionValue" : 0.00, "transactionDetail" : "CARIBBEAN FLAVORS AND FRA", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63560"), "pid" : 00000011, "transactionDate" : "2019-10-10 17:47:40", "transactionValue" : 0.00, "transactionDetail" : "HUA SQUARE LIMITED ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63561"), "pid" : 00000012, "transactionDate" : "2019-10-10 16:28:02", "transactionValue" : 0.00, "transactionDetail" : "UNIPET - GREGORY PARK ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63562"), "pid" : 00000013, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : "DIGICEL DING* ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63563"), "pid" : 00000014, "transactionDate" : "2019-10-10 12:34:55", "transactionValue" : 0.00, "transactionDetail" : "HI-LO - CROSS ROADS ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63564"), "pid" : 00000015, "transactionDate" : "2019-10-11 00:00:00", "transactionValue" : 0.00, "transactionDetail" : "FIRE MOUNTAIN GEMS & BEAD", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63565"), "pid" : 00000016, "transactionDate" : "2019-10-10 00:00:00", "transactionValue" : 0.00, "transactionDetail" : "AMZN Mktp US* ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63566"), "pid" : 00000017, "transactionDate" : "2019-10-11 04:23:08", "transactionValue" : 0.00, "transactionDetail" : "UBER TRIP ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63567"), "pid" : 00000018, "transactionDate" : "2019-10-10 18:48:37", "transactionValue" : 0.00, "transactionDetail" : "SHOPPERS FAIR - MANDEVILL", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63568"), "pid" : 00000019, "transactionDate" : "2019-10-10 06:33:29", "transactionValue" : 0.00, "transactionDetail" : "RUBIS WATERLOO - MLT G A ", "system" : "REDACTED" }
{ "_id" : ObjectId("5da92bb2b3507b13a8d63569"), "pid" : 00000020, "transactionDate" : "2019-10-10 21:31:23", "transactionValue" : 0.00, "transactionDetail" : "EASYWORSHIP ", "system" : "REDACTED" }
Как вы можете видеть, записи 00000008 и 00000009 содержат одно и то же значение TransactionsDetail, но яЯ не хочу, чтобы конвейер возвращал это.
Вот мой конвейер.
[
{
'$match': {
'pid': {
'$ne': idnum
},
'transactionDetail': {
'$ne': None
}
}
}, {
'$limit': 1000
}, {
'$sample': {
'size': 3
}
}, {
'$project': {
'transactionDetail': 1,
'_id': 0
}
}
]