我有一系列排名。每个排名都有一个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"}
])
但不幸的是,它并没有认识到localField
ranks.1
的值作为"元组"的第二个元素,而是(不存在)字段{{ 1}}显然,因为它不匹配用户。我的解决方法是首先使用这样的投影(在"ranks.1"
之后)提取第一个元素:
$unwind
然后将其用作{$project: {
user_id: {$arrayElemAt: ["$ranks", 1]}
}},
。但我想知道是否有更直接的解决方案。