sql >> Database teknologi >  >> NoSQL >> MongoDB

Holde felt i mongodb gruppe af

Jeg tror, ​​at denne forespørgsel er en løsning på det, du spørger om:

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

Der er nogle muligheder med, hvordan du vil se resten af ​​felterne. Jeg valgte at skubbe type2 til et array (tillader dubletter), tag den første værdi for year og month da disse altid vil være 2015 og 4 pr. din kamphandling, og addToSet dagen til et array (der ikke tillade dubletter). En anden mulighed ville være at skubbe hele dokumentet ind i en række matcher, men man skal være forsigtig med det på store samlinger.

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



  1. MongoDB-forespørgsel med betinget gruppe for erklæring

  2. Hvordan håndterer Trello omarrangering af kort, lister, tjeklister mm

  3. mongodb samlet forespørgsel returnerer ikke den rigtige sum ved brug af $sum

  4. Er der en måde at automatisk opdage ny klynge node IP i Redis Cluster med salat