0
我有一個排名集合。每個排名都有一個3元組(列表)[rank, user_id, score]
的數組。一個單一的文件可能看起來像這樣:
{
"_id" : 33691,
"timestamp" : ISODate("2017-03-03T01:29:31.663Z"),
"ranks" : [
[1, 53982363, 13666235],
[2, 26204263, 5544911],
]
}
現在我要上擁有完全用戶數據,而不只是一個用戶ID行列視圖,基本上是一個與我users
收藏加入。我的查詢是這樣的:
db.getCollection('pokeyen_bet_rankings').aggregate([
{$match: {_id: 33691}},
{$unwind: "$ranks"},
{$lookup: {
from: "users",
localField: "ranks.1",
foreignField: "_id",
as: "user"
}},
{$unwind: "$user"}
])
不過遺憾的是它並沒有爲ranks.1
爲「元組」的第二個元素localField
承認的價值,而是(不存在的)領域"ranks.1"
明顯,因爲它不」不符合用戶。我的解決辦法是用一個突起的第一像這樣(在$unwind
後)提取第一個元素:
{$project: {
user_id: {$arrayElemAt: ["$ranks", 1]}
}},
,然後使用該作爲localField
。但我想知道是否有更直接的解決方案。
我相信這個文檔引用了像[這裏](https://jira.mongodb.org/browse/SERVER-22881)中描述的ID數組,而不是像元組的數組。從這個意義上說,我確實需要'$ unwind'階段 – Felk
您確實需要'$ unwind'階段,但在$'unwind'之後沒有匹配的結構,它應該是本地字段或本地字段ID的數組。你在jira ticket中提到的ID的數組,但那些不是'UserIds'。其他的東西'輸入文檔中的'localField:<字段>'只需要字段名稱,所以你不能傳遞計算的屬性或表達式。 – Veeram
好的,謝謝。那麼我會堅持投影 – Felk