请注意以下架构:
Client {
name: String
}
Votes {
start: Date,
end: Date,
clients: [
client: Client,
votes: Number
]
}
是否可以在'votes.clients'中获取某个'Client'的索引而不返回整个数组?
我的用例如下。 'clients'数组按投票数排序。阵列中可能有数十万个元素。我需要在一段时间内快速获得某些客户的投票数量。例如:'昨天,客户John按投票数排名第205位。
答案 0 :(得分:0)
当您在某个时刻订购客户端数组时,您可以将索引值保留在子文档中。
clients: [
{
client: {type: mongoose.Schema.Types.ObjectId, ref: 'Client'},
votes: {type: Number},
index: {type: Number}
}
]
在聚合框架中使用$filter将只返回符合过滤条件的子文档,它们将包含索引。
Vote.aggregate( [{ $match: {end: "2016-10-14T19:39:52.476Z"}},
{
$project: {
clients: {
$filter: {
input: '$clients',
as: 'client',
cond: {$gt: ['$$client.votes', 50]}
}
}
}
}
])