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