sql >> Databasteknik >  >> NoSQL >> MongoDB

Hitta dubbletter av webbadresser i mongodb

Förutsatt att en samling dokument med name (med name istället för url ) fält som består av dubbletter av värden. Jag har två aggregationer som returnerar en del utdata som kan användas för att göra ytterligare bearbetning. Jag hoppas att du kommer att ha nytta av detta.

{ _id: 1, name: "jack" },
{ _id: 2, name: "john" },
{ _id: 3, name: "jim" },
{ _id: 4, name: "john" }
{ _id: 5, name: "john" }, 
{ _id: 6, name: "jim" }

Observera att "john" har 3 förekomster och "jim" har 2.

(1) Denna aggregering returnerar namnen som har dubbletter (mer än en förekomst):

db.collection.aggregate( [
  { 
      $group: { 
          _id: "$name", 
          count: { $sum: 1 }
      } 
  },
  { 
      $group: { 
          _id: "duplicate_names", 
          names: { $push: { $cond: [ { $gt: [ "$count", 1 ] }, "$_id", "$DUMMY" ] } }
      }
  }
] )

Utdata:

{ "_id" : "duplicate_names", "names" : [ "john", "jim" ] }


(2) Följande aggregering returnerar bara _id fältvärden för dubblettdokumenten. Till exempel har namnet "jim" _id värden 3 och 6 . Utdatat har bara id:n för dubblettdokumenten, dvs. 6 .

db.colection.aggregate( [
  { 
      $group: { 
          _id: "$name", 
          count: { $sum: 1 }, 
          ids: { $push: "$_id" } 
      } 
  },
  { 
      $group: { 
          _id: "duplicate_ids",  
          ids: { $push: { $slice: [ "$ids", 1, 9999 ] } } 
      } 
  },
  { 
      $project: { 
          ids: { 
              $reduce: {
                  input: "$ids", 
                  initialValue: [ ],
                  in: { $concatArrays: [ "$$this", "$$value" ] }
              }
          }
      } 
  }
] )

Utdata:

{ "_id" : duplicate_ids", "ids" : [ 6, 4, 5 ] }



  1. Mongoose JS findOne returnerar alltid null

  2. Hur installeras MongoDb av Meteor?

  3. En guide till MongoDB med Java

  4. Hur man installerar MongoDB på Ubuntu 18.04