2017-02-23 1 views
0

Hier ist eine Musterkollektion:Mongo db: ein Feld in einer Art und Weise .map .join verwandeln

[ 
{ 
    id: 1, 
    users: [ 
    {name: 'John Doe'}, {name: 'Ruth Paulson'} 
    ] 
}, 
{ 
    id: 2, 
    users: [ 
    {name: 'Meg Alosaurus'}, {name: 'Ruth Paulson'} 
    ] 
} 

] 

Wie schreibe ich eine Abfrage solche Ergebnisse zu erhalten:

[ 
    { id: 1, usernames: ['John Doe', 'Ruth Paulson'] } 
    { id: 2, usernames: ['Meg Alosaurus', 'Ruth Paulson'] } 
] 

Oder alternativ :

[ 
    { id: 1, usernames: 'John Doe, Ruth Paulson'}, 
    { id: 2, usernames: 'Meg Alosaurus, Ruth Paulson'} 
] 

In Javascript, würde ich tun:

collection.map(record => ({ 
    id: record.id, 
    usernames: record.map(user => user.name)/*.join(', ')*/ 
})); 

(Hinweis: Ich bin sehr neu zu Mongo db. Ich habe einige Konstrukte wie $ project, mapReduce, $ concat ausprobiert, konnte aber nicht das Ergebnis erhalten, das ich von ihnen wollte)

Antwort

1

Hier ist die Abfrage mit Aggregat.

db.collection.aggregate([ 
    { $unwind: { path : "$users", preserveNullAndEmptyArrays : true }}, 
    {$group : {_id: "$_id", usernames : {$push : "$users.name"}}} 
]); 

Ausgang: -

/* 1 */ 
{ 
    "_id" : 2, 
    "usernames" : [ 
     "Meg Alosaurus", 
     "Ruth Paulson" 
    ] 
} 

/* 2 */ 
{ 
    "_id" : 1, 
    "usernames" : [ 
     "John Doe", 
     "Ruth Paulson" 
    ] 
} 
Verwandte Themen