2017-01-05 3 views
2

meine db Sammlung ist wie, wie man Elemente von einem Objekt Array in mongodb

{ "_id" : "57f4c1323eb5c694041ghea3", 
"example" : [ 
    { 
     "exId" : "57f4c0d43eb5c694041fdebd", 
     "_id" : ObjectId("57f4c1323eb5c694041fded2"), 
     "projects" : [ 
      "57f4c1303eb5c694041fdec6" 
     ] 
    }, 
    { 
     "exId" : "57f24ee56da92f9c19b0efd4", 
     "_id" : ObjectId("57f4cfa93eb5c694041fdf4c"), 
     "projects" : [ 
      "57f4cfa83eb5c694041fdf45" 
     ] 
    }, 
    { 
     "exId" : "57f24ec16da92f9c19b0efcd", 
     "_id" : ObjectId("580864867a36f5bc1058c2c8"), 
     "projects" : [ 
      "580864837a36f5bc1058c2a9", 
      "57f4c1303eb5c694041fdec6" 
     ] 
    } 
], 

I-Ausgang erhalten müssen wie

"example": [ 
{ 
    "exId": "57f24ee56da92f9c19b0efd4", 
    "_id": "57f4cfa93eb5c694041fdf4c", 
    "projects": [ 
    "57f4cfa83eb5c694041fdf45" 
    ] 
}, 
{ 
     "exId" : "57f24ec16da92f9c19b0efcd", 
     "_id" : ObjectId("580864867a36f5bc1058c2c8"), 
     "projects" : [ 
      "580864837a36f5bc1058c2a9", 
      "57f4c1303eb5c694041fdec6" 
     ] 
    } 
] 
} 

wo meine Frage ist

 db.userDb.findOne({ '_id': req.params.userId }, { example: { $elemMatch: { exId: { $in: accIds } } } }) 

und accIds ist ein Array enthält Werte "57f24ec16da92f9c19b0efcd", "57f24ee56da92f9c19b0efd4", " 57f24fa26da92f9c19b0f005"

aber mein ouput ist

"example": [ 
{ 
    "exId": "57f24ee56da92f9c19b0efd4", 
    "_id": "57f4cfa93eb5c694041fdf4c", 
    "projects": [ 
    "57f4cfa83eb5c694041fdf45" 
    ] 
} 

],

jede Hilfe

+0

nicht 'acc' Array-Name ist 'accIds' – arunraj414

+1

Frage bearbeiten statt kommentieren – Alex

+1

Ist 'Beispiel' das oberste Element? Wenn ja, könnte 'findOne' der Grund sein, warum Sie genau 1 Ergebnis erhalten. – Smutje

Antwort

1
db.collection.aggregate([ 
      { $unwind: '$example' }, 
      { $unwind: '$example.projects' }, 
      { $match: { 'example.exId': { $in: accIds} } }, 
      { $group: { _id: null, projectList: { $addToSet: '$example.projects' } } }, 
     ]) 

Hoffnung, das wird funktionieren.

+0

groß .. es funktioniert einfach !!! .... – arunraj414

0

geschätzt Sie können wie unten etwas versuchen.

$ Filter, um das eingebettete Dokument nach den übereinstimmenden Kriterien zu filtern.

db.collection.aggregate([{ 
    "$project": { 
     "_id": 1, 
     "example": { 
      "$filter": { 
       "input": "$example", 
       "as": "result", 
       "cond": { 
        $or: [{ 
         $eq: ["$$result.exId", "57f24ec16da92f9c19b0efcd"] 
        }, { 
         $eq: ["$$result.exId", "57f24ee56da92f9c19b0efd4"] 
        }, { 
         $eq: ["$$result.exId", "57f24fa26da92f9c19b0f005"] 
        }] 
       } 
      } 
     } 
    } 
}]); 
Verwandte Themen