在以下两种情况下哪种更有效率:
使用in过滤器:
var filter = Builders<Employee>.Filter.In(x => x._id, IdList);
或者,使用linq并传递以下表达式:
(x => IdList.Contains(x))
MongoDB的驱动程序能否以相同的方式进行分解?
在以下两种情况下哪种更有效率:
使用in过滤器:
var filter = Builders<Employee>.Filter.In(x => x._id, IdList);
或者,使用linq并传递以下表达式:
(x => IdList.Contains(x))
MongoDB的驱动程序能否以相同的方式进行分解?
嗯,我猜这取决于您使用的端点以及筛选器或linq查询。例如:
collection.Find(Builders<Employee>.Filter.In(x => x.ID, IdList))
collection.Find(x => IdList.Contains(x.ID))
都翻译为:
db.Employees.find({
"_id": {
"$in": [
ObjectId("5d462fbd548a6107ccb019b6"),
ObjectId("5d462fbd548a6107ccb019b7")
]
}
})
和
collection.AsQueryable().Where(x => IdList.Contains(x.ID))
collection.Aggregate().Match(x => IdList.Contains(x.ID))
都可以翻译成:
db.Employees.aggregate(
[
{
"$match": {
"_id": {
"$in": [
ObjectId("5d462fbd548a6107ccb019b6"),
ObjectId("5d462fbd548a6107ccb019b7")
]
}
}
}
]
)
所以我认为公平的比较应该是“查找”与“聚合”,而不是“过滤”与“LINQ”,如果查询性能是您关心的问题。
据我所知,查找和聚合之间的主要区别在于它们(可能)使用不同的查询计划和索引。不太确定... 您来评判...