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

Bản đồ Giảm loại truy vấn cần tương quan với hàng trước đó

Nếu bạn đang làm điều này trong cơ sở dữ liệu quan hệ, bạn sẽ không so sánh các lượt truy cập theo từng hàng, thay vào đó bạn sẽ sử dụng truy vấn tổng hợp để tìm các lượt truy cập lặp lại (sử dụng SELECT ... GROUP BY), vì vậy bạn nên thực hiện theo cách tương tự trong MongoDB.

Trước tiên, bạn cần tổng hợp số lượt truy cập cho mỗi khách hàng mỗi cửa hàng mỗi ngày:

group1 = { "$group" : {
        "_id" : {
            "c" : "$clientId",
            "l" : "$location",
            "day" : {
                "y" : {
                    "$year" : "$tov"
                },
                "m" : {
                    "$month" : "$tov"
                },
                "d" : {
                    "$dayOfMonth" : "$tov"
                }
            }
        },
        "visits" : {
            "$sum" : 1
        }
    }
};

CHỈNH SỬA vì bạn chỉ muốn lặp lại NGÀY tiếp theo, bạn sẽ phân nhóm theo khách hàng, theo cửa hàng và đếm xem có bao nhiêu NGÀY khác nhau để khách hàng đó ghé thăm cửa hàng đó:

group2 = {"$group" : 
    {"_id" : {
        "c" : "$_id.c",
        "s" : "$_id.l"
    },
    "totalDays" : {
        "$sum" : 1
    }
} };

Sau đó, bạn chỉ muốn bao gồm các bản ghi ở trên nơi có nhiều hơn một lượt khách hàng ghé thăm cùng một cửa hàng trong nhiều ngày:

match = { "$match" : { "totalDays" : { "$gt" : 1 } } };

Dưới đây là tập dữ liệu mẫu và kết quả của việc tổng hợp này bằng cách sử dụng các hoạt động đường ống ở trên:

> db.visits.find({},{_id:0,purchases:0}).sort({location:1, clientId:1, tov:1})
{ "clientId" : 1, "location" : "l1", "tov" : ISODate("2013-01-01T20:00:00Z") }
{ "clientId" : 1, "location" : "l1", "tov" : ISODate("2013-01-01T21:00:00Z") }
{ "clientId" : 1, "location" : "l1", "tov" : ISODate("2013-01-03T20:00:00Z") }
{ "clientId" : 2, "location" : "l1", "tov" : ISODate("2013-01-01T21:00:00Z") }
{ "clientId" : 3, "location" : "l1", "tov" : ISODate("2013-01-01T21:00:00Z") }
{ "clientId" : 3, "location" : "l1", "tov" : ISODate("2013-01-02T21:00:00Z") }
{ "clientId" : 1, "location" : "l2", "tov" : ISODate("2013-01-01T23:00:00Z") }
{ "clientId" : 3, "location" : "l2", "tov" : ISODate("2013-01-02T21:00:00Z") }
{ "clientId" : 3, "location" : "l2", "tov" : ISODate("2013-01-02T21:00:00Z") }
{ "clientId" : 1, "location" : "l3", "tov" : ISODate("2013-01-03T20:00:00Z") }
{ "clientId" : 2, "location" : "l3", "tov" : ISODate("2013-01-04T20:00:00Z") }
{ "clientId" : 4, "location" : "l3", "tov" : ISODate("2013-01-04T20:00:00Z") }
{ "clientId" : 4, "location" : "l3", "tov" : ISODate("2013-01-04T21:00:00Z") }
{ "clientId" : 4, "location" : "l3", "tov" : ISODate("2013-01-04T22:00:00Z") }

> db.visits.aggregate(group1, group2, match)
{
    "result" : [
    {
        "_id" : {
            "c" : 3,
            "s" : "l1"
        },
        "totalDays" : 2
    },
    {
        "_id" : {
            "c" : 1,
            "s" : "l1"
        },
        "totalDays" : 2
    }
    ],
    "ok" : 1
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb giải thích không thành công:toán tử cấp cao nhất không xác định:$ query

  2. Cách sử dụng $ in hoặc $ nin trong tổng hợp mongo $ group $ cond

  3. NoSQL hướng cột khác với hướng tài liệu như thế nào?

  4. MongoDB khác với cơ sở dữ liệu SQL như thế nào

  5. MongoDB (máy chủ v 2.6.7) với trình điều khiển C # 2.0:Cách lấy kết quả từ InsertOneAsync