sql >> Database >  >> NoSQL >> MongoDB

Veld in mongodb-groep houden door

Ik geloof dat deze vraag een oplossing is voor wat je vraagt:

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

Er zijn enkele opties met hoe u de rest van de velden wilt zien. Ik heb ervoor gekozen om het type2 naar een array te pushen (waardoor duplicaten mogelijk zijn), neem de eerste waarde voor year en month aangezien dat altijd 2015 en 4 zal zijn volgens je wedstrijdoperatie, en addToSet de dag naar een array (duplicaten zijn niet toegestaan). Een andere optie zou zijn om het hele document in een array van overeenkomsten te duwen, maar daar moet je voorzichtig mee zijn bij grote verzamelingen.

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



  1. .NET Core singleton-service injecteren in een andere singleton-service

  2. Werken met PTVS, IronPython en MongoDB

  3. nextjs importeert maar roept geen functie op Module niet gevonden:Fout:kan 'dns' niet oplossen

  4. Waarom is SQLite sneller dan Redis in deze eenvoudige benchmark?