MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Поддържане на поле в mongodb group by

Вярвам, че това запитване е решение за това, което питате:

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}}
])

Има някои опции за това как искате да видите останалите полета. Избрах да насоча type2 към масив (позволявайки дубликати), да взема първата стойност за year и month тъй като те винаги ще бъдат 2015 и 4 за вашата операция за съвпадение и addToSet деня в масив (без да се допускат дубликати). Друг вариант е да поставите целия документ в масив от съвпадения, но трябва да внимавате с това при големи колекции.

{$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

  2. Не може да се монтира споделяне на файлове на azure като том на mongodb в екземпляри на контейнер на azure

  3. проекцията не работи със заявка за намиране

  4. Как да изпратите извлечено изображение от Mongo с помощта на GridFS в Spring Rest Call?

  5. Този възел не е стартиран с опцията replSet