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

Truy vấn MongoDB để tìm bản ghi có khóa chứa dấu chấm?

Đối với điều này, hãy sử dụng $ addFields. Trong đó, sử dụng $ objectToArray để lấy dữ liệu ở dạng khóa và giá trị. Sử dụng bộ lọc $ với $ indexOfBytes để kiểm tra xem có bất kỳ khóa nào với. bên trong nó.

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

> db.demo364.insertOne(
...   {
...       "details" : {
...          "details1.otherdetails.Name" : {"FirstName":"Chris" }
...       }
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e57d485d0ada61456dc936d")
}
> db.demo364.insertOne(
...    {
...       "details" : {
...          "details1.otherdetails.Name" : {"FirstName":"David" }
...       }
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e57d486d0ada61456dc936e")
}

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.demo364.find();

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

{ "_id" : ObjectId("5e57d485d0ada61456dc936d"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "Chris" } } }
{ "_id" : ObjectId("5e57d486d0ada61456dc936e"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "David" } } }

Sau đây là truy vấn để tìm bản ghi có khóa chứa dấu chấm -

> db.demo364.aggregate([
...    {
...       $addFields: {
...          result: {
...             $filter: {
...                input: { $objectToArray: "$details" },
...                cond: {
...                   $ne: [ { $indexOfBytes: [ "$$this.k", "." ] } , -1 ]
...                }
...             }
...          }
...       }
...    },
...    {
...       $match: {
...          $expr: {
...             $ne: [ { $size: "$result" }, 0 ]
...          }
...       }
...    },
...    {
...       $project: {
...          result: 0
...       }
...    }
... ])

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

{ "_id" : ObjectId("5e57d485d0ada61456dc936d"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "Chris" } } }
{ "_id" : ObjectId("5e57d486d0ada61456dc936e"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "David" } } }