2016-07-13 42 views
2

我有一個查找查詢,在這裏我需要檢查是否有對文件陣列的任何元素。我想索引數組的大小,以優化查詢,但我不知道如何創建這樣一個指數。如何創建MongoDB中數組長度的指標?

我已經創建過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 
} 

如何創建索引長度的引用?

回答

2

蒙戈索引不提供這樣的功能呢。

要存儲數組的大小 - 作爲一個解決方案,您可以有場ARRAYSIZE和手動更新對陣列上的每一個變化,然後在ARRAYSIZE創建字段索引。

相關問題