Computer >> Máy Tính >  >> Lập trình >> MongoDB

Tôi có thể sử dụng các chỉ mục khi truy vấn bằng tài liệu con MongoDB mà không có tên trường đã biết không?

Có, bạn có thể đạt được điều này bằng cách lập chỉ mục như “property.k” cho khóa và “thuộc tính.v” cho giá trị. Điều tương tự cũng được sử dụng để triển khai trong ensureIndex ().

Trước tiên, hãy để chúng tôi xem một ví dụ và tạo một bộ sưu tập với các tài liệu -

> db.demo274.insertOne({"details":[{StudentFirstName:"Chris",StudentLastName:"Brown"},
...   {StudentFirstName:"David",StudentLastName:"Miller"},
...   {StudentFirstName:"John",StudentLastName:"Smith"},
...   {StudentFirstName:"John",StudentLastName:"Doe"}
...]
...}
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e48de35dd099650a5401a42")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo274.find().pretty();

Đầu ra

Điều này sẽ tạo ra kết quả sau -

{
   "_id" : ObjectId("5e48de35dd099650a5401a42"),
   "details" : [
      {
         "StudentFirstName" : "Chris",
         "StudentLastName" : "Brown"
      },
      {
         "StudentFirstName" : "David",
         "StudentLastName" : "Miller"
      },
      {
         "StudentFirstName" : "John",
         "StudentLastName" : "Smith"
      },
      {
         "StudentFirstName" : "John",
         "StudentLastName" : "Doe"
      }
   ]
}

Sau đây là truy vấn để sử dụng các chỉ mục khi truy vấn bằng tài liệu con MongoDB mà không có tên trường đã biết -

> db.demo274.ensureIndex({"details.StudentFirstName": 1, "details.StudentLastName": 1});

Đầu ra

Điều này sẽ tạo ra kết quả sau -

{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}