Download documentdb emulator
Author: d | 2025-04-24
About the DocumentDB Emulator. The DocumentDB Emulator provides a high-fidelity emulation of the DocumentDB service. It supports identical functionality as Azure
DocumentDB Emulator .2 - Download, Review
The code we’re going to take as a starting point.So, put on your glasses and see if you’re familiar with coding-style below.class FeedHandler { Webservice webservice DocumentDb documentDb void handle(List changes) { for (int i = 0; i It’s some sort of FeedHandler.It has two properties, some Webservice class and a DocumentDb class.There’s a handle method which does something with a list of Doc objects. Documents?Try to figure out what’s going on here......Done?Reading stuff like this can make you feel like a human parser sometimes.Scanning the class name (FeedHandler?) and the one method (void handle) can give you, next to some eye sore, a “feel” for the purpose of everything.However, figuring out what exactly gets “handled” inside the handle method is much harder.There’s a for-loop there — but what’s exactly being iterated? How many times?This variable webservice is called, returning something called resource.If webservice returns successfully, the doc (a document?) being iterated over is updated with a status.Seems webservice can also throw an Exception, which is caught and the document is updated with another status.Ultimately, the document is “updated” by this documentDb instance. Looks like a database.Oh wait, this happens only for the “important” docs — a doc.type is checked first before doing all above stuff.Perhaps, you have heard of the phrase:Code is read more than it is written.Check out this piece of beauty:for (int i = 0; i Above code is written in an imperative style, which means that the concrete statements — which manipulate state and behaviour — are written out explicitly.Initialize an int i with zeroLoop while int i is less then the size of the changes listIncrement int i with 1 each iterationIn this style of imperative (procedural) coding (which most of the mainstream languages, including object-oriented programming (OOP) languages, such as Java, C++, C#, were designed to primarily support) a developer writes the exact statements a computer needs to perform to accomplish a certain task.A few signals of very imperative (procedural) code:Focus on how to perform the taskState changes and order of execution is importantMany loops and conditionalsThe code clearly focuses on the “How” — which makes the “What” hard to determine.Focus on the WhatOur first step, as the title of this article already have away, is to move away from the imperative style of coding and refactor to a more declarative style — of which FP is a form.The loop is bugging me the most.Here’s the new version of the code.class FeedHandler { Webservice webservice DocumentDb documentDb void handle(List changes) { // for (int i = 0; i doc.type == 'important' } .each { doc -> try { def resource = webservice.create(doc) doc.apiId = resource.id doc.status = 'processed' } catch (e) { doc.status = 'failed' doc.error = e.message } documentDb.update(doc) } }}What’s changed?The if (doc.type == 'important') part has been replaced with a findAll { doc -> doc.type == 'important' } again on the document collection itself — meaning “find all documents which are important and return a new collection with only those important About the DocumentDB Emulator. The DocumentDB Emulator provides a high-fidelity emulation of the DocumentDB service. It supports identical functionality as Azure To start developing with the DocumentDB Emulator, you'll first need to download and install the emulator. The DocumentDB Emulator can be downloaded from the Azure website. The emulator supports the same data model as DocumentDB, which means you can use the same code to interact with your local emulator as you would with a live DocumentDB database. Is protected wi... DocumentDB is Gaining Momentum in the Open-Source Database World Patty Chow In the short amount of time since we unveiled DocumentDB, our open-source document database platform powering the vCore based Azure Cosmos DB for MongoDB, and the feedback has been nothing short of phenomenal. In this short time, we've received a lot of attention from tech media and community members alike.Rapid Community AdoptionDevelopers and database enthusiasts have embraced DocumentDB with overwhelming enthusiasm, rapidly driving traction among both users and contributors. In just under a week, our project earned 1000 GitHub stars, nearly 50 forks, and multiple pull requests and issues—clear evidence of ... A Powerful, Open-Source MongoDB GUI for Everyone Tomasz Naumowicz IntroductionAzure Cosmos DB for MongoDB provides robust support through its Request Units (RU) model and vCore-based architecture, enabling flexible and scalable options for various workloads. We are now on a mission to deliver the ultimate developer experience. To achieve this, we have integrated Azure Cosmos DB for MongoDB support into the Azure Databases VS Code Extension.The free Azure Databases VS Code Extension, available on the VS Code Marketplace, provides a reliable and intuitive MongoDB GUI for developers, database administrators, and teams working with MongoDB - on Azure and beyond.MongoDB Supp...Comments
The code we’re going to take as a starting point.So, put on your glasses and see if you’re familiar with coding-style below.class FeedHandler { Webservice webservice DocumentDb documentDb void handle(List changes) { for (int i = 0; i It’s some sort of FeedHandler.It has two properties, some Webservice class and a DocumentDb class.There’s a handle method which does something with a list of Doc objects. Documents?Try to figure out what’s going on here......Done?Reading stuff like this can make you feel like a human parser sometimes.Scanning the class name (FeedHandler?) and the one method (void handle) can give you, next to some eye sore, a “feel” for the purpose of everything.However, figuring out what exactly gets “handled” inside the handle method is much harder.There’s a for-loop there — but what’s exactly being iterated? How many times?This variable webservice is called, returning something called resource.If webservice returns successfully, the doc (a document?) being iterated over is updated with a status.Seems webservice can also throw an Exception, which is caught and the document is updated with another status.Ultimately, the document is “updated” by this documentDb instance. Looks like a database.Oh wait, this happens only for the “important” docs — a doc.type is checked first before doing all above stuff.Perhaps, you have heard of the phrase:Code is read more than it is written.Check out this piece of beauty:for (int i = 0; i Above code is written in an imperative style, which means that the concrete statements — which manipulate state and behaviour — are written out explicitly.Initialize an int i with zeroLoop while int i is less then the size of the changes listIncrement int i with 1 each iterationIn this style of imperative (procedural) coding (which most of the mainstream languages, including object-oriented programming (OOP) languages, such as Java, C++, C#, were designed to primarily support) a developer writes the exact statements a computer needs to perform to accomplish a certain task.A few signals of very imperative (procedural) code:Focus on how to perform the taskState changes and order of execution is importantMany loops and conditionalsThe code clearly focuses on the “How” — which makes the “What” hard to determine.Focus on the WhatOur first step, as the title of this article already have away, is to move away from the imperative style of coding and refactor to a more declarative style — of which FP is a form.The loop is bugging me the most.Here’s the new version of the code.class FeedHandler { Webservice webservice DocumentDb documentDb void handle(List changes) { // for (int i = 0; i doc.type == 'important' } .each { doc -> try { def resource = webservice.create(doc) doc.apiId = resource.id doc.status = 'processed' } catch (e) { doc.status = 'failed' doc.error = e.message } documentDb.update(doc) } }}What’s changed?The if (doc.type == 'important') part has been replaced with a findAll { doc -> doc.type == 'important' } again on the document collection itself — meaning “find all documents which are important and return a new collection with only those important
2025-04-18Is protected wi... DocumentDB is Gaining Momentum in the Open-Source Database World Patty Chow In the short amount of time since we unveiled DocumentDB, our open-source document database platform powering the vCore based Azure Cosmos DB for MongoDB, and the feedback has been nothing short of phenomenal. In this short time, we've received a lot of attention from tech media and community members alike.Rapid Community AdoptionDevelopers and database enthusiasts have embraced DocumentDB with overwhelming enthusiasm, rapidly driving traction among both users and contributors. In just under a week, our project earned 1000 GitHub stars, nearly 50 forks, and multiple pull requests and issues—clear evidence of ... A Powerful, Open-Source MongoDB GUI for Everyone Tomasz Naumowicz IntroductionAzure Cosmos DB for MongoDB provides robust support through its Request Units (RU) model and vCore-based architecture, enabling flexible and scalable options for various workloads. We are now on a mission to deliver the ultimate developer experience. To achieve this, we have integrated Azure Cosmos DB for MongoDB support into the Azure Databases VS Code Extension.The free Azure Databases VS Code Extension, available on the VS Code Marketplace, provides a reliable and intuitive MongoDB GUI for developers, database administrators, and teams working with MongoDB - on Azure and beyond.MongoDB Supp...
2025-04-07Exception.Fixes a bug in which sorting wasn't applied on the next page when CosmosPageRequest was used.2.1.9 (December 26, 2019)New featuresAdds annotation field to enable or disable automatic collection creation.Key bug fixesFixes findById method's behavior. Previously, this method returned empty if the entity wasn't found instead of throwing an exception.2.2.0 (October 21, 2019)New featuresComplete Reactive Azure Cosmos DB Repository support.Azure Cosmos DB Request Diagnostics String and Query Metrics support.Azure Cosmos DB SDK version update to 3.3.1.Spring Framework version upgrade to 5.2.0.RELEASE.Spring Data Commons version upgrade to 2.2.0.RELEASE.Adds findByIdAndPartitionKey and deleteByIdAndPartitionKey APIs.Removes dependency from azure-documentdb.Rebrands DocumentDB to Azure Cosmos DB.Key bug fixesFixes "Sorting throws exception when pageSize is less than total items in repository."2.1.8 (October 18, 2019)New featuresDeprecates DocumentDB APIs.Adds findByIdAndPartitionKey and deleteByIdAndPartitionKey APIs.Adds optimistic locking based on _etag.Enables SpEL expression for document collection name.Adds ObjectMapper improvements.2.1.7 (October 18, 2019)New featuresAdds Azure Cosmos DB SDK version 3 dependency.Adds Reactive Azure Cosmos DB Repository.Updates implementation of DocumentDbTemplate to use Azure Cosmos DB SDK version 3.Adds other configuration changes for Reactive Azure Cosmos DB Repository support.2.1.2 (March 19, 2019)Key bug fixesRemoves applicationInsights dependency for:Potential risk of dependencies polluting.Java 11 incompatibility.Avoiding potential performance impact to CPU and/or memory.2.0.7 (March 20, 2019)Key bug fixesBackport removes applicationInsights dependency for:Potential risk of dependencies polluting.Java 11 incompatibility.Avoiding potential performance impact to CPU and/or memory.2.1.1 (March 7, 2019)New featuresUpdates main version to 2.1.1.2.0.6 (March 7, 2019)New featuresIgnore all exceptions from telemetry.2.1.0 (December 17, 2018)New featuresUpdates version to 2.1.0 to address problem.2.0.5 (September 13, 2018)New featuresAdds keywords exists and startsWith.Updates Readme.Key bug fixesFixes "Can't call self href directly for Entity."Fixes "findAll will fail if collection is not created."2.0.4 (Prerelease) (August 23, 2018)New featuresRenames package from documentdb to cosmosdb.Adds new feature of query method keyword. 16 keywords from API for NoSQL are now supported.Adds new feature of query with paging and sorting.Simplifies
2025-04-15Object that sets the populateQuotaInfo property to true. Retrieve the value from the x-ms-documentdb-collection-index-transformation-progress response header.// retrieve the container's detailsconst containerResponse = await client.database('database').container('container').read({ populateQuotaInfo: true});// retrieve the index transformation progress from the response headersconst indexTransformationProgress = replaceResponse.headers['x-ms-documentdb-collection-index-transformation-progress'];Add a composite index: console.log("create container with composite indexes"); const containerDefWithCompositeIndexes = { id: "containerWithCompositeIndexingPolicy", indexingPolicy: { automatic: true, indexingMode: IndexingMode.consistent, includedPaths: [ { path: "/*", }, ], excludedPaths: [ { path: '/"systemMetadata"/*', }, ], compositeIndexes: [ [ { path: "/field", order: "ascending" }, { path: "/key", order: "ascending" }, ], ], }, }; const containerWithCompositeIndexes = ( await database.containers.create(containerDefWithCompositeIndexes) ).container;Use the Python SDKPython SDK V3Python SDK V4When you use the Python SDK V3, the container configuration is managed as a dictionary. From this dictionary, you can access the indexing policy and all its attributes. For more information, see Quickstart: Azure Cosmos DB for NoSQL client library for Python.Retrieve the container's details:containerPath = 'dbs/database/colls/collection'container = client.ReadContainer(containerPath)Set the indexing mode to consistent:container['indexingPolicy']['indexingMode'] = 'consistent'Define an indexing policy with an included path and a spatial index:container["indexingPolicy"] = { "indexingMode":"consistent", "spatialIndexes":[ {"path":"/location/*","types":["Point"]} ], "includedPaths":[{"path":"/age/*","indexes":[]}], "excludedPaths":[{"path":"/*"}]}Define an indexing policy with an excluded path:container["indexingPolicy"] = { "indexingMode":"consistent", "includedPaths":[{"path":"/*","indexes":[]}], "excludedPaths":[{"path":"/name/*"}]}Add a composite index:container['indexingPolicy']['compositeIndexes'] = [ [ { "path": "/name", "order": "ascending" }, { "path": "/age", "order": "descending" } ] ]Update the container with changes:response = client.ReplaceContainer(containerPath, container)When you use the Python SDK V4, the container configuration is managed as a dictionary. From this dictionary, you can access the indexing policy and all its attributes.Retrieve the container's details:database_client = cosmos_client.get_database_client('database')container_client = database_client.get_container_client('container')container = container_client.read()Set the indexing mode to consistent:indexingPolicy = { 'indexingMode': 'consistent'}Define an indexing policy with an included path and a spatial index:indexingPolicy = { "indexingMode":"consistent", "spatialIndexes":[ {"path":"/location/*","types":["Point"]} ], "includedPaths":[{"path":"/age/*","indexes":[]}], "excludedPaths":[{"path":"/*"}]}Define an indexing policy with an excluded path:indexingPolicy = { "indexingMode":"consistent", "includedPaths":[{"path":"/*","indexes":[]}], "excludedPaths":[{"path":"/name/*"}]}Add a composite index:indexingPolicy['compositeIndexes'] = [ [ { "path": "/name", "order": "ascending" }, { "path": "/age", "order": "descending" } ]]Update the container with changes:response = database_client.replace_container(container_client, container['partitionKey'], indexingPolicy)Retrieve the index transformation progress from the response headers:container_client.read(populate_quota_info = True, response_hook = lambda h,p: print(h['x-ms-documentdb-collection-index-transformation-progress']))Related contentIndexing overviewIndexing policy --> Feedback Additional resources In this article
2025-04-23Latest Version Robo 3T 1.4.4 Operating System Windows Vista64 / Windows 7 64 / Windows 8 64 / Windows 10 64 User Rating Click to vote Author / Product 3T Software Labs / External Link Filename robo3t-1.4.2-windows-x86_64-8650949.exe MD5 Checksum 8b88dca3984f86e09a03bb4d8de1b40d Sometimes latest versions of the software can cause issues when installed on older devices or devices running an older version of the operating system.Software makers usually fix these issues but it can take them some time. What you can do in the meantime is to download and install an older version of Robo 3T 1.4.2. For those interested in downloading the most recent release of Robo 3T or reading our review, simply click here. All old versions distributed on our website are completely virus-free and available for download at no cost. We would love to hear from youIf you have any questions or ideas that you want to share with us - head over to our Contact page and let us know. We value your feedback! Robo 3T 1.4.2 Screenshots The images below have been resized. Click on them to view the screenshots in full size. What's new in this version: - Fixed: Fix broken paging in DocumentDB
2025-03-30.NET SDK.NET SDK V3.NET SDK V2The ContainerProperties object from the .NET SDK v3 exposes an IndexingPolicy property that lets you change the IndexingMode and add or remove IncludedPaths and ExcludedPaths. For more information, see Quickstart: Azure Cosmos DB for NoSQL client library for .NET.// Retrieve the container's detailsContainerResponse containerResponse = await client.GetContainer("database", "container").ReadContainerAsync();// Set the indexing mode to consistentcontainerResponse.Resource.IndexingPolicy.IndexingMode = IndexingMode.Consistent;// Add an included pathcontainerResponse.Resource.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });// Add an excluded pathcontainerResponse.Resource.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/name/*" });// Add a spatial indexSpatialPath spatialPath = new SpatialPath{ Path = "/locations/*"};spatialPath.SpatialTypes.Add(SpatialType.Point);containerResponse.Resource.IndexingPolicy.SpatialIndexes.Add(spatialPath);// Add a composite indexcontainerResponse.Resource.IndexingPolicy.CompositeIndexes.Add(new Collection { new CompositePath() { Path = "/name", Order = CompositePathSortOrder.Ascending }, new CompositePath() { Path = "/age", Order = CompositePathSortOrder.Descending } });// Update container with changesawait client.GetContainer("database", "container").ReplaceContainerAsync(containerResponse.Resource);To track the index transformation progress, pass a RequestOptions object that sets the PopulateQuotaInfo property to true. Retrieve the value from the x-ms-documentdb-collection-index-transformation-progress response header.// retrieve the container's detailsContainerResponse containerResponse = await client.GetContainer("database", "container").ReadContainerAsync(new ContainerRequestOptions { PopulateQuotaInfo = true });// retrieve the index transformation progress from the resultlong indexTransformationProgress = long.Parse(containerResponse.Headers["x-ms-documentdb-collection-index-transformation-progress"]);The SDK V3 fluent API lets you write this definition in a concise and efficient way when defining a custom indexing policy while creating a new container:await client.GetDatabase("database").DefineContainer(name: "container", partitionKeyPath: "/myPartitionKey") .WithIndexingPolicy() .WithIncludedPaths() .Path("/*") .Attach() .WithExcludedPaths() .Path("/name/*") .Attach() .WithSpatialIndex() .Path("/locations/*", SpatialType.Point) .Attach() .WithCompositeIndex() .Path("/name", CompositePathSortOrder.Ascending) .Path("/age", CompositePathSortOrder.Descending) .Attach() .Attach() .CreateIfNotExistsAsync();The DocumentCollection object from the .NET SDK v2 exposes an IndexingPolicy property that lets you change the IndexingMode and add or remove IncludedPaths and ExcludedPaths.// Retrieve the container's detailsResourceResponse containerResponse = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("database", "container"));// Set the indexing mode to consistentcontainerResponse.Resource.IndexingPolicy.IndexingMode = IndexingMode.Consistent;// Add an included pathcontainerResponse.Resource.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });// Add an excluded pathcontainerResponse.Resource.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/name/*" });// Add a spatial indexcontainerResponse.Resource.IndexingPolicy.SpatialIndexes.Add(new SpatialSpec() { Path = "/locations/*", SpatialTypes = new Collection() { SpatialType.Point } } );// Add a composite indexcontainerResponse.Resource.IndexingPolicy.CompositeIndexes.Add(new Collection {new CompositePath() { Path = "/name", Order = CompositePathSortOrder.Ascending }, new CompositePath() { Path = "/age", Order = CompositePathSortOrder.Descending }});// Update container with changesawait client.ReplaceDocumentCollectionAsync(containerResponse.Resource);To track the index transformation progress, pass a RequestOptions object that sets the PopulateQuotaInfo property to true.// retrieve
2025-04-19