MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB индексира за $elemMatch

Въз основа на вашето запитване предполагам, че вашите документи изглеждат по следния начин:

{
    "_id" : 1,
    "lc" : "eng",
    "group" : "xyz",
    "indices" : [
        {
            "text" : "as",
            "pos" : 2
        }, 
        {
            "text" : "text",
            "pos" : 4
        }
    ]
}

Създадох тестова колекция с документи от този формат, създадох индекса и изпълних заявката, която публикувахте с опцията .explain().

Индексът се използва според очакванията:

> db.test.ensureIndex({"lc":1, "group":1, "indices.text":1, "indices.pos":1})
> db.test.find({ lc: "eng", group: "xyz", indices: { $elemMatch: { text: "as", pos: { $gt: 1 } } } }).explain()
{
    "cursor" : "BtreeCursor lc_1_group_1_indices.text_1_indices.pos_1",
    "isMultiKey" : true,
    "n" : NumberLong(1),
    "nscannedObjects" : NumberLong(1),
    "nscanned" : NumberLong(1),
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 0,
    "nChunkSkips" : NumberLong(0),
    "millis" : 0,
    "indexBounds" : {
        "lc" : [
            [
                "eng",
                "eng"
            ]
        ],
        "group" : [
            [
                "xyz",
                "xyz"
            ]
        ],
        "indices.text" : [
            [
                "as",
                "as"
            ]
        ],
        "indices.pos" : [
            [
                {
                    "$minElement" : 1
                },
                {
                    "$maxElement" : 1
                }
            ]
        ]
    },
    "server" : "Marcs-MacBook-Pro.local:27017"
}

Документацията за функцията .explain() може да бъде намерена тук:http://www.mongodb .org/display/DOCS/Explain

.explain() може да се използва за показване на информация за заявка, включително кой (ако има такъв) индекс се използва.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ReactiveMongo FindAndModify Пояснение

  2. Използване на UUID в mongoose за препратки към ObjectID

  3. обектът на командния курсор не може да се записва

  4. MONGODB [DEBUG] cursor.refresh() за курсор 7078636577051629992

  5. Как да създадете и предадете bson документ - Go lang?