我有几个mongo查询。
var threads = postCollection.AsQueryable<PostMongoEntity>()
.Select(w => w.ThreadId);
var entities = threadCollection.AsQueryable<ThreadMongoEntity>()
.Where(e => e.ThreadId.In(threads))
.OrderBy(e => e.Time)
.Skip(page * ThreadPageSize)
.Take(ThreadPageSize);
第一个查询从posts集合中查找所有线程ID,第二个查询获取具有该id的所有线程。我想知道这是否可以在实际数据库上执行所有操作。这不是完整的查询,但大多数重要的东西都在这里。我担心的部分是Where(e => e.ThreadId.In(threads))
。它会将线程列表发送到数据库,还是会获取所有线程并在本地进行过滤?
答案 0 :(得分:1)
它会将threadId列表发送给MongoDB。 IT不会将所有记录拉回来并在本地进行过滤。我认为这就是你想要的。
答案 1 :(得分:0)
嗯,从类型兼容性看起来合法。 threads
IQueryable
实现IEnumerable
,而操作In
完全接受IEnumerable(http://api.mongodb.org/csharp/1.9.2/)
抱歉只是仔细看看你的问题
但!
显然你需要使用long(或者在PostMongoEntity中专用于Id的类型)。因此,只有当 In
接受原始类型的IEnumerable而不是实体时,它才变得合法。
P.S。这种方法对PostMongoEntity键的数量有一些限制 - 无法快速找到确切的参考。