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

Cần số lượng riêng biệt trên nhiều trường đã được kết hợp từ một bộ sưu tập khác bằng cách sử dụng truy vấn tổng hợp mongodb

Cái này cần phải dùng mẹo. Tôi đã thử nghiệm nó trên bộ đầu vào của bạn và cố tình thêm một số giá trị dupe như NYC hiển thị ở nhiều hơn một DESTINATION để đảm bảo rằng nó không bị lừa (tức là số lượng riêng biệt như được yêu cầu). Để vui, hãy bình luận tất cả các giai đoạn, sau đó từ trên xuống UNcomment để xem hiệu quả của từng giai đoạn trong quy trình.

var id = "1";

c=db.foo.aggregate([
// Find a thing:
{$match: {"_id" : id}}

// Do the lookup into the objects collection:
,{$lookup: {"from" : "foo2",
            "localField" : "objectsIds",
            "foreignField" : "_id",
            "as" : "objectResults"}}

// OK, so we've got a bunch of extra material now.  Let's
// get down to just the metaDataMap:
,{$project: {x: "$objectResults.metaDataMap"}}
,{$unwind: "$x"}
,{$project: {"_id":0}}

// Use $objectToArray to get all the field names dynamically:
// Replace the old x with new x (don't need the old one):
,{$project: {x: {$objectToArray: "$x"}}}
,{$unwind: "$x"}

// Collect unique field names.  Interesting note: the values
// here are ARRAYS, not scalars, so $push is creating an
// array of arrays:
,{$group: {_id: "$x.k", tmp: {$push: "$x.v"}}}

// Almost there!  We have to turn the array of array (of string)
// into a single array which we'll subsequently dedupe.  We will
// overwrite the old tmp with a new one, too:
,{$addFields: {tmp: {$reduce:{
    input: "$tmp",
    initialValue:[],
    in:{$concatArrays: [ "$$value", "$$this"]}
        }}
    }}

// Now just unwind and regroup using the addToSet operator
// to dedupe the list:
,{$unwind: "$tmp"}
,{$group: {_id: "$_id", uniqueVals: {$addToSet: "$tmp"}}}

// Add size for good measure:
,{$addFields: {size: {"$size":"$uniqueVals"}} }
          ]);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django + Heroku + MongoDB Atlas (Djongo) =DatabaseError không có ngoại lệ

  2. Lỗi kiểm tra mongodb khởi động mùa xuân

  3. MongoDB 3.0 Windows Service Start:Lỗi hệ thống 2 đã xảy ra

  4. MongoDB:ngoại lệ trong initAndListen:20 Đã cố tạo tệp khóa trên thư mục chỉ đọc:/ data / db, chấm dứt

  5. Phân tích hiệu suất của một truy vấn - mongoDB