2016-12-16 4 views
1

Dies ist eine Ansicht von Mongo Dokument. Ich möchte nur diejenigen Einträge in dem Dokument behalten, deren Schlüsselwert am längsten ist. Der Schlüsselwert hier ist ein String, also die Schlüssel mit der längsten String-Länge nurFilter Mongo Dokument - Python

{ 
    "_id" : ObjectId("585a431415c7a981b47ac4ee"), 
    "key" : "http://www.adnansami.com", 
    "value" : "A" 
} 
{ 
    "_id" : ObjectId("585a431415c7a981b47ac4ef"), 
    "key" : "http://www.leap-networks.com", 
    "value" : "BB" 
} 
{ 
    "_id" : ObjectId("585a431d15c7a981b47ac4f0"), 
    "key" : "http://www.leap-networks.com", 
    "value" : "B" 
} 
{ 
    "_id" : ObjectId("585a431d15c7a981b47ac4f1"), 
    "key" : "http://www.machinelearningmastery.com", 
    "value" : "C" 
} 
{ 
    "_id" : ObjectId("585a432515c7a981b47ac4f2"), 
    "key" : "http://www.leap-networks.com", 
    "value" : "BBB" 
} 
{ 
    "_id" : ObjectId("585a432815c7a981b47ac4f3"), 
    "key" : "http://www.machinelearningmastery.com", 
    "value" : "CC" 
} 
{ 
    "_id" : ObjectId("585a432d15c7a981b47ac4f4"), 
    "key" : "http://www.leap-networks.com", 
    "value" : "BBBB" 
} 
{ 
    "_id" : ObjectId("585a433115c7a981b47ac4f5"), 
    "key" : "http://www.machinelearningmastery.com", 
    "value" : "CCC" 
} 
{ 
    "_id" : ObjectId("585a433615c7a981b47ac4f6"), 
    "key" : "http://www.leap-networks.com", 
    "value" : "BBBBB" 
} 
{ 
    "_id" : ObjectId("585a433d15c7a981b47ac4f7"), 
    "key" : "http://www.machinelearningmastery.com", 
    "value" : "CCCC" 
} 
{ 
    "_id" : ObjectId("585a434915c7a981b47ac4f8"), 
    "key" : "http://www.machinelearningmastery.com", 
    "value" : "CCCCC" 
} 

So Ausgabe sollte

sein bleiben sollte
{ 
    "_id" : ObjectId("58539dc715c7a964817686f9"), 
    "http://www.adnansami.com" : "A " 
    } 
    { 
    "_id" : ObjectId("585a433615c7a981b47ac4f6"), 
    "key" : "http://www.leap-networks.com", 
    "value" : "BBBBB" 
    } 
    { 
    "_id" : ObjectId("585a434915c7a981b47ac4f8"), 
    "key" : "http://www.machinelearningmastery.com", 
    "value" : "CCCCC" 
    } 

Wie kann ich das erreichen?

Antwort

2

Das wäre sehr komplex in Mongo abzufragen, ohne auf einige Map-Reduce-Operationen wegen der Hash-Schlüssel zurückgreifen zu müssen. Mongo funktioniert sehr gut mit einer eingebetteten Struktur, wo Sie sich wie ein Schlüssel/Wert-Dokument haben

{ 
    "_id" : ObjectId("58539dfa15c7a96481768700"),   
    "key": "http://www.leap-networks.com", 
    "value": "AAAAAAAA" 
} 

statt, so sollten Sie erwägen, die Umstrukturierung Ihres Dokuments es Wende und leichter in MongoDB gesucht zu machen.

Für die oben vorgeschlagene Schema können Sie die Aggregation Rahmen anwenden, wo Sie die $strLenCP Operator in MongoDB 3.4 verwenden können, um die Länge des Wertefeldes zu berechnen:

db.collection.aggregate([ 
    { 
     "$addFields": { 
      "strLength": { 
       "$strLenCP": "$value" 
      } 
     } 
    }, 
    { "$sort": { "strLength": -1 } }, 
    { 
     "$group": { 
      "_id": "$key", 
      "value": { "$first": "$value" }, 
      "doc_id": { "$first": "$_id" }   
     } 
    }  
]) 

Beispielausgabe

{ 
    "doc_id": ObjectId("58539dc715c7a964817686f9"), 
    "_id" : "http://www.adnansami.com", 
    "value": "A "  
}, 
{ 
    "doc_id": ObjectId("58539dd515c7a964817686fc"), 
    "_id" : "http://www.movies.yahoo.com", 
    "value": "AAAA"  
}, 
{ 
    "doc_id": ObjectId("58539dfa15c7a96481768700"), 
    "_id" : "http://www.leap-networks.com", 
    "value": "AAAAAAAA"  
} 
+0

Ich bekomme Fehler 'Feldnamen in Punktschreibweise müssen in Anführungszeichen in Zeile 3 Spalte 1 sein ', versuchte Bearbeitung, aber funktioniert nicht – Guru

+0

Ich habe th bearbeitet Die Frage mit den Änderungen habe ich in meinem Dokument gemacht. Mit diesem Änderungsdokument habe ich gerade "Bewertungen" von Ihrer Anfrage entfernt. Sorry für verzögerte Antwort – Guru

+0

Ich habe die gleiche Änderung an der Abfrage, d. H .. "Bewertungen entfernt" immer noch nicht funktioniert? – Guru

Verwandte Themen