MongoDB C#查询执行位置

时间:2014-10-03 17:14:12

标签: c# mongodb

我有几个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))。它会将线程列表发送到数据库,还是会获取所有线程并在本地进行过滤?

2 个答案:

答案 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键的数量有一些限制 - 无法快速找到确切的参考。