我有一個遵循這種結構的幾個文件:
{
"queue-type": <integer>,
"participants": [{
"id": <integer>,
"level": <level>,
"flags": <integer>
}]
}
而且有一個多鍵指數participants.id
。
在代碼中,有一個查找查詢,如下:db.queues.find({"participants.id": {"$in": [2, 3, 4]}})
,其產生以下結果:
{"queue-type": 1, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
{"queue-type": 25, "participants": [{"id": 5, "level": 10, "flags":4},{"id": 15, "level": 10, "flags":8},{"id": 4, "level": 10, "flags":8}]}
有什麼辦法也取回這是用來匹配的元素查詢?
{"queue-type": 1, "_matched": 2, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
{"queue-type": 25, "_matched": 4, "participants": [{"id": 5, "level": 10, "flags":4},{"id": 15, "level": 10, "flags":8},{"id": 4, "level": 10, "flags":8}]}
PS:喜歡的東西,我試圖避免通過[2, 3, 4]
和participants
陣列循環,因爲它們更強壯。
例子: 隊列
{"queue-type": 1, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
{"queue-type": 2, "participants": [{"id": 3, "level": 10, "flags":0}]}
{"queue-type": 3, "participants": [{"id": 4, "level": 10, "flags":4},{"id": 5, "level": 10, "flags":8}]}
{"queue-type": 4, "participants": [{"id": 7, "level": 10, "flags":4},{"id": 8, "level": 10, "flags":8},{"id": 9, "level": 10, "flags":8}]}
結果我希望檢索:
db.queues.find({"participants.id": {"$in": [2]}});
{"queue-type": 1, "_matched": 2, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
注意 「_matched」 元素是一樣的 'participant.id' 搜索查詢給定
另一個例子:
db.queues.find({"participants.id": {"$in": [2, 3, 6]}});
{"queue-type": 1, "_matched": 2, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
{"queue-type": 2, "_matched": 3, "participants": [{"id": 3, "level": 10, "flags":0}]}
多場比賽例如:
db.queues.find({"participants.id": {"$in": [1, 2, 3]}});
{"queue-type": 1, "_matched": 1, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
{"queue-type": 1, "_matched": 2, "participants": [{"id": 1, "level": 10, "flags":4},{"id": 2, "level": 10, "flags":8}]}
{"queue-type": 2, "_matched": 3, "participants": [{"id": 3, "level": 10, "flags":0}]}
一個沒有很好的解決辦法是簡單地複製了 '參與者' 的數據( '參與者-CPY'),然後運行:
db.queues.find({"participants-cpy.id": {"$in": [2]}}, {"participants-cpy.$":1, "participants":1, "_id": 1, "queue-type":1})
可能用於檢索用於「匹配」查詢的元素,但會生成重複的數據 - 這是非常糟糕的:p
你說的'這是用來匹配上query'元素是什麼意思? – Shrabanee
對不起,在這裏不清楚。 在查詢中,我總是傳遞一個列表(在示例[2,3,4]中),但大多數時間只是列表中的一個元素將成功匹配。要更新帖子以試圖說清楚。 –
我明白你想要什麼。你可以嘗試使用'aggregate'和'$ group',這是獲得你想要的東西的方法。 – Shrabanee