noN*_*ich 2 mongodb aggregation-framework
我需要包含多个标识符的文档
它不起作用(冻结):
db.collection.aggregate([{
$match: {
$expr: {
$in: ['$_id', [4, 6]]
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
但它有效:
db.collection.find({
_id: {
$in: [4, 6]
}
});
Run Code Online (Sandbox Code Playgroud)
$expr索引使用有限制,
请参阅此
只有 $eq、$lt、$lte、$gt 和 $gte 聚合运算符可以使用索引
过去支持的运算符甚至更少,MongoDB 5.0 添加了更多,并且可能下一个版本会添加更多。
$in聚合运算符不能使用索引。但如果你把它替换为
aggregate(
[{"$match":
{"$expr":{"$or":[{"$eq":[4, "$_id"]}, {"$eq":[6, "$_id"]}]}}}])
Run Code Online (Sandbox Code Playgroud)
速度会很快,并且会使用索引。
在这里,您可以避免$expr使用$in查询运算符而不是$in聚合运算符,如注释中所述。
{ $match: { _id: {$in: [4, 6]} }
Run Code Online (Sandbox Code Playgroud)