MongoDB中的BsonJavaScript是否可索引?

时间:2013-07-19 06:51:39

标签: mongodb mongodb-.net-driver

我有以下代码用于检索MongoDB中的消息,这些消息碰巧有一个按位标志“Status”,这就是为什么我使用内置的BsonJavaScript功能来过滤这些记录的原因。该语句是否会尝试在ToUserId或Status字段上使用索引,即使它使用JavaScript语法进行查询评估?

public long NewMessageCount
{
    get
    {
        var script = CreateScript("Status", MessageStatus.Unread);
        return MongoConnectionHandler.MongoCollection.Count(Query.Where(script));    
    }
}

public string ToUserId = "51e8dd21d84513129c644fa6";
public string CreateScript(string field, MessageStatus filter)
{
    return String.Format("this.ToUserId == '{0}' && (this.{1} & {2}) == {3}", ToUserId, field, (int)filter);
}

1 个答案:

答案 0 :(得分:1)

根据MongoDB 2.4上$where的文档:

$where evaluates JavaScript and cannot take advantage of indexes.

我建议您在MongoDB问题跟踪器中观看/ upvote SERVER-3518,这是对按位查询运算符的功能请求。

除了将标志复制到不需要按位查询或使用低效$where查询的布尔字段之外,暂时没有一个好的解决方法。