2017-01-05 19 views
2

私は私のクエリがある場合MongoDBの中でオブジェクト配列から項目を取得する方法を

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

として出力を取得する必要があります

{ "_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" 
     ] 
    } 
], 

ように私のデシベルのコレクションがある

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

とaccIdsは配列に値 "57f24ec16da92f9c19b0efcd"、 "57f24ee56da92f9c19b0efd4"、 " 57f24fa26da92f9c19b0f005"

が、私の出力に含まは

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

である]、

任意のヘルプが

+0

'acc'の配列名は 'accIds'です – arunraj414

+1

コメントではなく質問を編集 – Alex

+1

'example'は一番上の要素ですか?もしそうなら、 'findOne'が正確に1つの結果を得る理由かもしれません。 – Smutje

答えて

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

これは動作します願っています。

+0

素晴らしいです。 – arunraj414

0

を高く評価しているあなたは、以下のような何かを試すことができます。

$ filter埋め込みドキュメントを一致条件でフィルタリングします。

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"] 
        }] 
       } 
      } 
     } 
    } 
}]); 
関連する問題