2017-04-04 2 views
0
db.school.find({ "merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3" }) 

dies ist ein Beispiel-Dokument aus der Schule Sammlung von dieser Abfrage:Cant finden doppelte Werte für Array-Teil in mongodb

{ 
     "_id" : ObjectId("57fafasf2323232323232f57682cd42"), 
     "status" : "wait", 
"merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3", 
     "isValid" : false, 
    "fields" : { "schoolid" : { 
      "value" : "2323232", 
      "detail" : { 
       "revisedBy" : "teacher", 
       "revisionDate" : ISODate("2015-06-24T09:22:44.288+0000") 
      }, 
      "history" : [ 

      ] 
     }} 
    } 

ich sehen will, welche duplcate schoolid hat. SO mache ich das:

db.school.aggregate([ 
{$match:{ "merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3" 
    { $group: { 
    _id: { fields.schoolid.value: "$fields.schoolid.value" }, 
    count: { $sum: 1 } 
    } }, 
    { $match: { 
    count: { $gte: 2 } 
    } }, 
    { $sort : { count : -1} }, 
    { $limit : 10 } 
]); 

aber es gibt Fehler.

viele Fehler für viele Linien

ich so

_id: { "fields.schoolid.value": "$fields.schoolid.value" }, 

oder _id zu tun versucht: { 'fields.schoolid.value': „$" fields.schoolid. Wert '"},

aber hat nicht funktioniert. Kann ich es benutzen?

Antwort

1

Laut dem Dokument, das Sie angegeben haben, gibt es kein Feld fields, daher kann die Gruppenphase nicht funktionieren. Ihre Anfrage sollte:

db.school.aggregate([ 
    { $match: { "merchant" : "cc8c0421-e7fc-464d-9e1d-37e168b216c3"}}, 
    { $group: { 
    _id: { value: "$fields.schoolid.value" }, 
    count: { $sum: 1 } 
    } }, 
    { $match: { 
    count: { $gte: 2 } 
    } }, 
    { $sort : { count : -1} }, 
    { $limit : 10 } 
]); 

Beachten Sie auch, dass fields.schoolid.value kein gültiger Feldname ist, müssen Sie es enclode in „“ oder zu entfernen „“.

+0

ich Felder hinzugefügt. Es tut uns leid. Ich habe es mit "" aber immer noch gleich eingeschlossen – mark

Verwandte Themen