sql >> データベース >  >> NoSQL >> MongoDB

mongodbで重複するURLを検索する

    nameのコレクションドキュメントを想定 (nameを使用 urlの代わりに )重複する値で構成されるフィールド。さらに処理を行うために使用できる出力を返す2つの集計があります。これがお役に立てば幸いです。

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

    「john」には3回、「jim」には2回出現することに注意してください。

    (1)この集計では、重複する(複数回出現する)名前が返されます:

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

    出力:

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


    (2)次の集計は、_idを返すだけです。 重複するドキュメントのフィールド値。たとえば、「jim」という名前には_idがあります 値3 および6 。出力には、重複するドキュメントのID、つまり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" ] }
                  }
              }
          } 
      }
    ] )
    

    出力:

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



    1. ストライプ:ソースまたは顧客を提供する必要があります

    2. MongoDBで投票システムをモデル化するための最良の方法

    3. NodesJS + Passport + RedisStoreのシリアル化と逆シリアル化を実装しますか?

    4. ノードサーバーを使用してMongoDBに接続する際の警告