如何在MongoDB中为数组长度创建索引?

时间:2016-07-13 07:40:42

标签: c# mongodb mongodb-query

我有一个查询查询,我需要检查文档中数组中是否有任何元素。我想索引数组的大小以优化查询,但我不知道如何创建这样的索引。

我已经通过MongoDB C#驱动程序创建了过滤器:

Builders<Post>.Filter.And(new List<FilterDefinition<Post>>()
{
    Builders<Post>.Filter.Eq(x => x.Category, Category.COLLECTION),
    Builders<Post>.Filter.SizeGt(x => x.Details.References, 0)
})  

文档类型如下所示:

{ 
    "_id" : ObjectId("577a271f2b365917c4d72678"), 
    "UserId" : ObjectId("577a26a32b365917c4d67e42"), 
    "Category" : NumberInt(4), 
    "Details" : {
        "_id" : ObjectId("577a271f2b365917c4d72677"), 
        "References" : [
            {
                "RefId" : ObjectId("577a887b4fd1ae0e1c7b2035"), 
                "Order" : NumberInt(0), 
                "RefType" : NumberInt(1)
            }
        ]
    }, 
    "Modified" : ISODate("2016-07-05T01:26:33.549+0000"),  
    "IsActive" : true
}

查询如下所示:

{ 
    "query" : {
        "find" : "post", 
        "filter" : {
            "UserId" : {
                "$in" : [
                    ObjectId("577a26a12b365917c4d67dd5"),
                    ObjectId("577a26a12b365917c4d67dd3")
                ]
            }, 
            "IsActive" : true, 
            "$or" : [
                {
                    "Category" : NumberInt(4), 
                    "UserId" : {
                        "$nin" : [

                        ]
                    }, 
                    "Details.References.0" : {
                        "$exists" : true
                    }
                }, 
                {
                    "Category" : {
                        "$ne" : NumberInt(4)
                    }
                }
            ], 
            "Modified" : {
                "$lt" : ISODate("2016-07-04T13:59:32.094+0000")
            }
        }, 
        "sort" : {
            "Modified" : NumberInt(-1)
        }, 
        "limit" : NumberInt(10)
    }, 
    "time" : NumberInt(33), 
    "docsScanned" : NumberInt(1125)
}

正如你所看到的,它扫描了很多文件(1125)以找到合适的文件。我想进一步减少这个数字,但我不知道如何索引这部分:

"Details.References.0" : {
    "$exists" : true
}

如何为引用的长度创建索引?

1 个答案:

答案 0 :(得分:3)

Mongo索引还没有提供这样的功能。

要存储数组的大小 - 作为解决方案,您可以使用字段arraySize并在该数组上的每次更改时手动更新它,然后在arraySize上创建字段索引。