2013-02-08 10 views
22

Mam kolekcję mongo i muszę znaleźć dokumenty w tej kolekcji, w której nazwa i adres pól są równe.Jak znaleźć dokumenty mongo z tym samym polem?

Szukałem dużo, mogę tylko znaleźć MongoDb query condition on comparing 2 fields i MongoDB: Unique and sparse compound indexes with sparse values, ale te pytania są szuka dokumentów, w których pola a = Pole B, ale muszę znaleźć document1.a == document2.a

+1

Jak można zrozumieć, co 'document2' jest? Czy chodzi o znalezienie wszystkich duplikatów? – Sammaye

+0

Więc chcesz znaleźć duplikaty? – Philipp

Odpowiedz

71

Możesz znaleźć duplikaty przy użyciu Aggregation Framework i $group.

Przykładowe dane skonfigurować: zapytanie

// Batch insert some test data 
db.mycollection.insert([ 
    {a:1, b:2, c:3}, 
    {a:1, b:2, c:4}, 
    {a:0, b:2, c:3}, 
    {a:3, b:2, c:4} 
]) 

Aggregation:

db.mycollection.aggregate(
    { $group: { 
     // Group by fields to match on (a,b) 
     _id: { a: "$a", b: "$b" }, 

     // Count number of matching docs for the group 
     count: { $sum: 1 }, 

     // Save the _id for matching docs 
     docs: { $push: "$_id" } 
    }}, 

    // Limit results to duplicates (more than 1 match) 
    { $match: { 
     count: { $gt : 1 } 
    }} 
) 

Przykâadowa:

{ 
    "result" : [ 
     { 
      "_id" : { 
       "a" : 1, 
       "b" : 2 
      }, 
      "count" : 2, 
      "docs" : [ 
       ObjectId("5162b2e7d650a687b2154232"), 
       ObjectId("5162b2e7d650a687b2154233") 
      ] 
     } 
    ], 
    "ok" : 1 
} 
+2

+1 bardzo dziękuję bardzo (dla użytkowników Mongovue usuń komentarze //) – JPBlanc

Powiązane problemy