How to Create Indexes for Custom Game Collections

Indexes on collections allow MongoDB to process queries more efficiently and speed up the time it takes to execute your Cloud Code scripts. For queries that don't use an index, MongoDB must scan all documents in a collection for documents that match the query. For large collections this can be an expensive operation.

In this tutorial, we'll create a custom collection and add an index to it via a Cloud Code script.

Important! Mongo Runtime Collections are now deprecated and you'll only be able to follow this tutorial if you are working on a game that you created before January 2018, when the Game Data Service was launched. If you're working on a new game that was created after the Game Data Service was launched in January 2018, you won't be able to create new Mongo Runtime collections in the Collections panel and you'll get an error if you try to do this or if you try to create a Runtime collection using Cloud Code. For details on how to work with the new Game Data Service, see Data Type Explorer.

Creating an Index

Creating a Runtime Collection

As a first step, let's create a runtime collection using the NoSQL Explorer:

1. In the GameSparks developer portal, navigate to the NoSQL page.

2. Under Collections, click to add a new Collection:

A Create Collection dialog appears.

3. Enter a Name for your Collection and select the Runtime for Type:

4. Click to Create your custom Collection.

This creates a new Collection called script.playerChatHistory, which your game can use to store custom data and will be listed under Runtime:

For this example, let's assume that this collection contains documents that look like this:

    {
     "_id": {
     "$oid": "53b155dfe4b04cfe90ec2315"
     },
     "player": "537f08e1e4b01fdedfa52c49",
     "dateOfChat": "2014-06-30T15:03:40.661Z",
     "chatData": "Hi buddy, fancy a game of Pong?"
    }


Using Cloud Code to Create an Index on the Collection

The next step is to write some Cloud Code that creates an index on this Collection. A sensible place to attach this type of script is the Game Published Event:

1. Navigate to the Configurator >Cloud Code.

2. Under Scripts click to expand System.

3. Click on the Game Published option to access that script:

4. Enter the following Javascript in the editor window and click the Save button:

    var playerChatHistoryCollection = Spark.runtimeCollection('playerChatHistory');
    playerChatHistoryCollection.ensureIndex({"dateOfChat" : -1});

This script uses the SparkMongoCollectionReadWrite API ensureIndex method to add an index to the Collection on the chatDate field:

5. You can also create compound index across multiple fields. For example:

    var playerChatHistoryCollection = Spark.runtimeCollection('playerChatHistory');
    playerChatHistoryCollection.ensureIndex({"dateOfChat" : -1, "player" : 1});

Testing the Index Script

To test our script we need to publish the game:

1. Navigate to the Game Overview page.

2. Click to Create a new Snapshot:

3. Enter a Name for your new Snapshot and click to Create it:

4. Publish the Snapshot by clicking the publish icon:

Publishing the game will have triggered the Cloud Code script that we attached to the Game Published Event.

Tip! You can check for Cloud Code script errors in the script.log collection from within the NoSQL Explorer tool.

Did this page help you? Please enter your feedback below. For questions about using this part of the platform, please contact support here