簡體   English   中英

MongoDB不在文檔嵌套數組中使用索引

[英]MongoDB not using index inside nested array of documents

我有一個龐大而復雜的收藏,看起來像這樣:

{ 
"_id" : ObjectId("574c55312368e5aa90bbf27b"), 
"id" : NumberInt(10000), 
"BookieId" : NumberInt(1), 
"EventBookieId" : null, 
"LeagueId" : NumberInt(214), 
"LeagueNameId" : NumberInt(4571), 
"Team1Id" : NumberInt(435), 
"Team1NameId" : null, 
"Team2Id" : NumberInt(430), 
"Team2NameId" : null, 
"EventDateTime" : ISODate("2013-09-14T13:00:00.000+0000"), 
"isNew" : true, 
"CountryId" : NumberInt(36), 
"isCountry" : true, 
"isLeague" : true, 
"Gameid" : null, 
"Reversed" : false, 
"eventId" : NumberInt(10000), 
"bets" : [
    {
        "id" : NumberInt(1), 
        "EventConnectionId" : NumberInt(10000), 
        "isCorners" : false, 
        "DateTime" : ISODate("2013-09-10T08:06:43.333+0000"), 
        "IsLive" : false, 
        "Team1Score" : null, 
        "Team2Score" : null, 
        "Team1RedCards" : null, 
        "Team2RedCards" : null, 
        "odds" : [

        ]
    }, 
    {
        "id" : NumberInt(2), 
        "EventConnectionId" : NumberInt(10000), 
        "isCorners" : false, 
        "DateTime" : ISODate("2013-09-10T18:50:26.840+0000"), 
        "IsLive" : false, 
        "Team1Score" : NumberInt(0), 
        "Team2Score" : NumberInt(0), 
        "Team1RedCards" : null, 
        "Team2RedCards" : null, 
        "odds" : [
            {
                "id" : NumberInt(62282718), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "21968173", 
                "ScrapingDateTime" : ISODate("2013-09-13T07:39:15.810+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 1.81, 
                "Odds2" : 2.1236, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(2000), 
                "Bet" : "Hcap", 
                "BetGamePart" : NumberInt(0), 
                "Line" : -0.25, 
                "ID_IDENTITY" : NumberInt(1)
            }, 
            {
                "id" : NumberInt(62282719), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "21968175", 
                "ScrapingDateTime" : ISODate("2013-09-13T07:39:15.810+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.04167, 
                "Odds2" : 1.86, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(2000), 
                "Bet" : "Total", 
                "BetGamePart" : NumberInt(0), 
                "Line" : 2.0, 
                "ID_IDENTITY" : NumberInt(2)
            }, 
            {
                "id" : NumberInt(62282720), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "21968177", 
                "ScrapingDateTime" : ISODate("2013-09-13T07:39:15.810+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.16, 
                "Odds2" : 3.45, 
                "Odds3" : 3.05, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "X12", 
                "BetGamePart" : NumberInt(0), 
                "Line" : null, 
                "ID_IDENTITY" : NumberInt(3)
            }, 
            {
                "id" : NumberInt(62282721), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "21968179", 
                "ScrapingDateTime" : ISODate("2013-09-13T07:39:15.810+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.21951, 
                "Odds2" : 1.7, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "Hcap", 
                "BetGamePart" : NumberInt(1), 
                "Line" : -0.25, 
                "ID_IDENTITY" : NumberInt(4)
            }, 
            {
                "id" : NumberInt(62282722), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "21968180", 
                "ScrapingDateTime" : ISODate("2013-09-13T07:39:15.810+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.78, 
                "Odds2" : 3.9, 
                "Odds3" : 1.99, 
                "MaxBet" : NumberInt(500), 
                "Bet" : "X12", 
                "BetGamePart" : NumberInt(1), 
                "Line" : null, 
                "ID_IDENTITY" : NumberInt(5)
            }, 
            {
                "id" : NumberInt(62282723), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "21968181", 
                "ScrapingDateTime" : ISODate("2013-09-13T07:39:15.810+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 1.93, 
                "Odds2" : 1.95, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "Total", 
                "BetGamePart" : NumberInt(1), 
                "Line" : 0.75, 
                "ID_IDENTITY" : NumberInt(6)
            }, 
            {
                "id" : NumberInt(62290838), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "14382209", 
                "ScrapingDateTime" : ISODate("2013-09-13T14:38:11.303+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 1.81, 
                "Odds2" : 2.1236, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(2000), 
                "Bet" : "Hcap", 
                "BetGamePart" : NumberInt(0), 
                "Line" : -0.25, 
                "ID_IDENTITY" : NumberInt(7)
            }, 
            {
                "id" : NumberInt(62290839), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "14382211", 
                "ScrapingDateTime" : ISODate("2013-09-13T08:27:39.600+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.05263, 
                "Odds2" : 1.85, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(2000), 
                "Bet" : "Total", 
                "BetGamePart" : NumberInt(0), 
                "Line" : 2.0, 
                "ID_IDENTITY" : NumberInt(8)
            }, 
            {
                "id" : NumberInt(62290840), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "14382213", 
                "ScrapingDateTime" : ISODate("2013-09-13T09:29:22.863+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.15, 
                "Odds2" : 3.45, 
                "Odds3" : 3.1, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "X12", 
                "BetGamePart" : NumberInt(0), 
                "Line" : null, 
                "ID_IDENTITY" : NumberInt(9)
            }, 
            {
                "id" : NumberInt(62290841), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "14382215", 
                "ScrapingDateTime" : ISODate("2013-09-13T14:38:11.303+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.21951, 
                "Odds2" : 1.7, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "Hcap", 
                "BetGamePart" : NumberInt(1), 
                "Line" : -0.25, 
                "ID_IDENTITY" : NumberInt(10)
            }, 
            {
                "id" : NumberInt(62290842), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "14382216", 
                "ScrapingDateTime" : ISODate("2013-09-13T14:38:11.303+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.78, 
                "Odds2" : 3.9, 
                "Odds3" : 1.99, 
                "MaxBet" : NumberInt(500), 
                "Bet" : "X12", 
                "BetGamePart" : NumberInt(1), 
                "Line" : null, 
                "ID_IDENTITY" : NumberInt(11)
            }, 
            {
                "id" : NumberInt(62290843), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "14382217", 
                "ScrapingDateTime" : ISODate("2013-09-13T14:38:11.303+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 1.93, 
                "Odds2" : 1.95, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "Total", 
                "BetGamePart" : NumberInt(1), 
                "Line" : 0.75, 
                "ID_IDENTITY" : NumberInt(12)
            }, 
            {
                "id" : NumberInt(62381139), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "20864356", 
                "ScrapingDateTime" : ISODate("2013-09-13T14:38:11.303+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.05263, 
                "Odds2" : 1.85, 
                "Odds3" : null, 
                "MaxBet" : NumberInt(2000), 
                "Bet" : "Total", 
                "BetGamePart" : NumberInt(0), 
                "Line" : 2.0, 
                "ID_IDENTITY" : NumberInt(13)
            }, 
            {
                "id" : NumberInt(62381140), 
                "BetId" : NumberInt(2), 
                "BookieId" : NumberInt(1), 
                "BookieBetId" : "20864358", 
                "ScrapingDateTime" : ISODate("2013-09-13T14:38:11.303+0000"), 
                "MinuteInGame" : null, 
                "GamePart" : null, 
                "Odds1" : 2.15, 
                "Odds2" : 3.45, 
                "Odds3" : 3.1, 
                "MaxBet" : NumberInt(1000), 
                "Bet" : "X12", 
                "BetGamePart" : NumberInt(0), 
                "Line" : null, 
                "ID_IDENTITY" : NumberInt(14)
            }
        ]
    }
]

}

我在ScrapingDateTime上創建了一個索引,該索引駐留在賠率數組中,而該賠率數組又位於bets數組中。 這是索引:

{"bets.0.odds.0.ScrapingDateTime" : 1}

當我運行此查詢時,它不使用索引而不執行集合掃描,任何人都可以解釋該方法,或者我應該使用該索引做什么?

         db.EventsBetsOdds.find({'bets.odds.ScrapingDateTime':{'$gte':ISODate("2014-08-13T14:38:11.303Z"),
     '$lt':ISODate("2014-09-14T14:38:11.303Z")}},
     {"bets.odds.ScrapingDateTime":1,"bets.odds.Line":1,"bets.IsLive":1,_id:0}).explain()

索引{“ bets.0.odds.0.ScrapingDateTime”:1}是指名為“ 0”的子文檔,而不是位置為零的數組元素。 例如:

{
 "bets" : {
   "0" : {
     "odds" : {
       "0" : {
         "ScrapingDateTime" : .... 
       }
     }
   }
 }
}

所需的索引將是:

db.EventsBetsOdds.ensureIndex({ "bets.odds.ScrapingDateTime" : 1 })

如果您希望索引涵蓋查詢,則索引為:

db.EventsBetsOdds.createIndex({ 
 "bets.odds.ScrapingDateTime" : 1,
 "bets.odds.Line" : 1,
 "bets.IsLive" : 1 
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM