Skip to content

RUST-2054 Incorrect default index name when creating an index #1225

Open
@biro456

Description

@biro456

Versions/Environment

  1. What version of Rust are you using? rustc 1.81.0 (eeb90cda1 2024-09-04)
  2. What operating system are you using? Ubuntu 22.04.4 LTS on WSL/Windows 10 Pro 22H2
  3. What versions of the driver and its dependencies are you using? [email protected] and [email protected]
  4. What version of MongoDB are you using? MongoDB 8.0.1 Community
  5. What is your MongoDB topology (standalone, replica set, sharded cluster, serverless)? standalone

Describe the bug

When creating indexes with the text, 2d, 2dsphere or hashed types the default index name generated by the driver does not follow the documentation.

Steps to reproduce

  1. Start a local MongoDB server
  2. Run this snippet
use mongodb::bson::{doc, Document};
use mongodb::error::Result;
use mongodb::{Client, IndexModel};

#[tokio::main]
async fn main() -> Result<()> {
  let client = Client::with_uri_str("mongodb://localhost:27017").await?;
  let db = client.database("test");

  db.create_collection("test").await?;

  let col = db.collection::<Document>("test");

  col.create_index(IndexModel::builder().keys(doc! { "field": "2d" }).build()).await?;

  Ok(())
}
  1. Verify the index name with the shell or Compass
Expected result

The index is named field_2d.

Actual result

The index is named field_"2d".

image

The problem boils down to

.map(|(k, v)| format!("{}_{}", k, v))

where the Bson conversion of v to a string is always wrapped by ".
Since this logic is not public I had to reproduce it in my code and that's how I found the bug.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions