我想從集合中提取具有重復ID的 "drive "物件的檔案的ID,這些物件嵌套在 "streetModel "的陣列中。 這是我的典型檔案:
{
"_id"/span>: {
"$oid": "61375bec4fa522001b608568"
},
"name": "Streetz",
"statusDetail": {},
"streetModel": {
"_id": "3.7389-51.0566",
"name": "Kosheen - Darude - Swedish - Trynidad - Maui",
"countryCode": "DEN",
"驅動器": [{
"_id": -903500698,
"方向": "WEST"。
}, {
"_id": 1915399546,
"方向": "EAST"。
}, {
"_id": 1294835467,
"方向": "NORTH"。
}, {
"_id": 1248969937,
"方向": "EAST"。
}, {
"_id": 1248969937,
"方向": "EAST"。
}, {
"_id": 1492411786,
"方向": "SOUTH"。
}]
},
"createdAt": {
"$date": "2021-09-07T12:32:44.238Z"
}
在這個ID為61375bec4fa522001b608568的特殊檔案中,在 "streetModel "中,在 "drives "陣列中,我得到了id為1248969937的重復驅動器物件。 我想創建一個資料庫查詢,以回傳所有有這種問題(重復的 "驅動器")的檔案的ID。 現在,我得到了這樣的結果:
db.streets.aggregate( [
{
$unwind: "$streetModel"。
},
{
$unwind: "$drives" }.
},
{
$group: {
_id: {
id: "$_id"。
},
sum: {
$sum: 1.
},
}
},
{
$match: {
sum: {
$gt: 1.
}
}
},
{
$project: {
_id: "$_id._id"/span>,
duplicates: {
drives: "$_id"。
}
}
}
])
但事實并非如此。
我嘗試了很多方法來重寫這個查詢,但不幸的是,它并不奏效。
uj5u.com熱心網友回復:
查詢
- unwind
- 按檔案id driverid分組
- 只保留那些有超過一次相同driveid的檔案 。
- replace-root是為了使檔案更好看,你也可以用$project代替 。
- 如果你需要更多的階段,我想你可以添加它,例如,要獲得有這個問題的檔案,只需專案的docid 。
db.collection.aggregate( [
{
"$unwind"/span>: {
"path": "$streetModel.drives": "path": "$streetModel.drives"
}
},
{
"$group": {
"_id": {
"docid": "$_id",
"driveid": "$streetModel.drives._id"。
},
"重復": {
"$push": "$streetModel.drives.direction": "$push""$match": {
"$expr": {
"$gt": [
{
"$size": "$duplicates".
},
1
]
}
}
},
{
"$replaceRoot"/span>: {
"newRoot"/span>: {
"$mergeObjects": [
"$_id",
"$ROOT".
]
}
}
},
{
"$project": {
"_id": 0.
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324212.html
標籤:
