2017-02-22 2 views
2

dieses Dokument Angenommen:MongoDB ersetzen Wert bei der Aggregation

{ 
    _id : Object(“12918”), 
    username : “username”, 
    password : “password”, 
    occupation: { 
     name : “Football”, 
     code : 254, 
    } 
}, 
{ 
    _id : Object(“12919”), 
    username : “username2”, 
    password : “password2”, 
    occupation: { 
     name : “Basketball”, 
     code : 255, 
    } 
} 

ich eine Abfrage möchten, die zurückgibt:

{ 
    _id : Object(“12918”), 
    occupation : { 
     name : “*”, 
     code : 254 
    } 
}, 
{ 
    _id : Object(“12919”), 
    occupation : { 
     name : “*”, 
     code : 255 
    } 
} 

So eine Abfrage, die die Felder _id und Beruf nur zurückgibt. Und das Feld occupation.name muss durch * in allen Datensätzen ersetzt werden.

habe ich versucht, diese Anfrage:

aggregate([ 
    { 
     "$project" : 
     { 
      "_id" : 1, 
      “occupation" : 1, 
      “occupation.name" : { $literal:“*” } 
     } 
    } 
]) 

, die die folgende Ausnahme zurückgegeben:

{ "ok": 0, "errmsg": „kann nicht einen Ausdruck für das Feld hinzufügen Beruf, weil es bereits einen Ausdruck für dieses Feld oder eines seiner Unterfelder gibt. ", " code ": 16400 }

Gibt es einen Weg, dies zu erreichen?

+0

Was ist Ihr Mongo Server-Version? – Veeram

+0

Es ist Version 3.0.1 –

Antwort

2

Sie können die verschachtelten Dokument Projektion occupation wie folgt angeben:

db.test.aggregate([{ 
    "$project": { 
     "_id": 1, 
     "occupation": { 
      code: 1, 
      name: { $literal: "*" } 
     } 
    } 
}]) 
+0

Danke Bertrand! –

1

Sie können es wie folgt tun:

db.collectionName.aggregate([{$project:{ 
      _id:1, 
      occupation:{"name":{$literal:"*"}, 
         "code":"$occupation.code" 
         } 
      }  
    }])