【发布时间】:2016-01-05 16:21:53
【问题描述】:
目前我使用以下查找查询来获取某个ID的最新文档
Conditions.find({
caveId: caveId
},
{
sort: {diveDate:-1},
limit: 1,
fields: {caveId: 1, "visibility.visibility":1, diveDate: 1}
});
例如,我如何使用多个 ID 与 $in 一起使用
我使用以下查询进行了尝试。问题是它会将所有找到的 CaveId 的文档限制为 1。但它应该为每个不同的 CaveId 设置限制。
Conditions.find({
caveId: {$in: caveIds}
},
{
sort: {diveDate:-1},
limit: 1,
fields: {caveId: 1, "visibility.visibility":1, diveDate: 1}
});
我想出的一个解决方案是使用聚合功能。
var conditionIds = Conditions.aggregate(
[
{"$match": { caveId: {"$in": caveIds}}},
{
$group:
{
_id: "$caveId",
conditionId: {$last: "$_id"},
diveDate: { $last: "$diveDate" }
}
}
]
).map(function(child) { return child.conditionId});
var conditions = Conditions.find({
_id: {$in: conditionIds}
},
{
fields: {caveId: 1, "visibility.visibility":1, diveDate: 1}
});
【问题讨论】: