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

Giữ trường trong nhóm mongodb bởi

Tôi tin rằng truy vấn này là một giải pháp cho những gì bạn đang hỏi:

db.test.aggregate([
  // Filter the docs based on your criteria
  {$match: {
    type1: {$in: ['type1A', 'type1B']},
    type2: {$in: ['type2A', 'type2B']},
    'date.year': 2015,
    'date.month': 4,
    'date.type': 'day',
    'date.day': {$gte: 4, $lte: 7}
  }},

  // Group by iddoc and type1 and count them
  {$group: {
    _id: { iddoc: '$iddoc', type1: '$type1' },
    sum: {$sum: 1},
    type2: { $push: '$type2' },
    year: { $first: '$date.year' },
    month: { $first: '$date.month' },
    day: { $addToSet: '$date.day' }
  }},

  // Sort by sum, descending
  {$sort: {sum: -1}}
])

Có một số tùy chọn với cách bạn muốn xem phần còn lại của các trường. Tôi đã chọn đẩy type2 vào một mảng (cho phép trùng lặp), lấy giá trị đầu tiên cho yearmonth vì chúng sẽ luôn là 2015 và 4 cho mỗi thao tác đối sánh của bạn và addToSet ngày thành một mảng (không cho phép trùng lặp). Một tùy chọn khác sẽ là đẩy toàn bộ tài liệu vào một mảng đối sánh, nhưng bạn nên cẩn thận với điều đó trên các bộ sưu tập lớn.

{$group: {
    _id: { iddoc: '$iddoc', type1: '$type1' },
    sum: {$sum: 1},
    matches: { $push: '$$ROOT' }
  }},



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Regex, Chỉ mục &Hiệu suất

  2. Cách đề xuất để xóa đối tượng trong MongoDB dựa trên một tuyến đường

  3. MongoDB:Làm thế nào để tìm hiểu xem một trường mảng có chứa một phần tử không?

  4. Lỗi Mongod (được cài đặt bằng homebrew)

  5. Tôi cần truy xuất đối tượng MongoDB chỉ với mục mảng của bộ lọc