MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

truy vấn mongoDB để truy xuất từ ​​bộ sưu tập mảng lồng nhau

Bạn sẽ cần $ elemMatch tổng hợp .

db.users.aggregate([
    {
        $unwind: "$Sessions"
    },
    {
        $match: {
            "Sessions.Last_Login": {
                $gte: ISODate("2016-06-16T00:00:00.0Z"),
                $lt: ISODate("2016-06-17T00:00:00.0Z")
            }
        }
    },
    {
        $group: {
            _id: {
                _id: "$_id",
                First_Name: "$First_Name",
                Last_Name: "$Last_Name"
            },
            Sessions: {
                $push: "$Sessions"
            }
        }
    },
    {
        $project: {
            _id: "$_id._id",
            First_Name: "$_id.First_Name",
            Last_Name: "$_id.Last_Name",
            Sessions: "$Sessions"
        }
    }
])

Vì vậy, truy vấn sẽ thực hiện các bước sau:

  1. $unwind tất cả Sessions phần tử
  2. $match tài liệu trong phạm vi ngày
  3. $group cùng nhau các tài liệu theo _id , First_Name , Last_Name
  4. $project tài liệu trông giống như định dạng ban đầu

Tôi đã bỏ qua một số trường, nhưng bạn có thể dễ dàng thêm nó vào $group$project các bước. Và tất nhiên, bạn sẽ cần thay đổi phạm vi ngày.

Tôi lo ngại về hiệu suất của truy vấn này trong một bộ sưu tập lớn. Có lẽ tốt hơn nếu bạn sử dụng truy vấn đầu tiên tôi đưa ra và lọc các phiên bạn muốn trong mã của mình.

Chỉnh sửa:

Như @chridam đã nói, truy vấn này sẽ chỉ hoạt động nếu bạn thay đổi Last_Login thành ISODate() , những gì được khuyến nghị.

Chỉnh sửa 2:

Cập nhật truy vấn để sử dụng aggregate và khớp với yêu cầu chỉ tìm nạp Sessions trong phạm vi ngày.

Đây là phiên bản cũ:

db.users.filter({
    'Sessions': {
        '$elemMatch': {
            'Last_Login': {
                '$gte': ISODate("2016-06-16T00:00:00.0Z"),
                '$lt': ISODate("2016-06-17T00:00:00.0Z")
            }
        }
    }
})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Các cách triển khai lập phiên bản dữ liệu trong MongoDB

  2. LỖI Mongodb:quy trình con không thành công, đã thoát với lỗi số 51

  3. Tìm một chuỗi trong một chuỗi trong SQL

  4. Làm cách nào để hủy bỏ một truy vấn đang chạy trong MongoDB shell?

  5. Liên kết &Tạo MongoDB tham gia bằng SQL:Phần 1