2017-02-02 4 views
0

У меня есть документ следующей структуры:MongoDB - возвращает все ассоциативные документы со значением ключа, полученного из другого запроса

{ 
    "Type" : "Request", 
    "Cat" : "A", 
    "ID" : 10 
} 

{ 
    "Type" : "Processed", 
    "Cat" : "A", 
    "ID" : 10 
} 

{ 
    "Type" : "Receieved", 
    "Cat" : "A", 
    "ID" : 10 
} 

{ 
    "Type" : "Receieved", 
    "Cat" : "B", 
    "ID" : 11 
} 

{ 
    "Type" : "Processed", 
    "Cat" : "C", 
    "ID" : 12 
} 

Я хочу документы:

  1. Те документы типа: " Обработано "и получить его ID
  2. И все связанные документы с идентификатором, полученным сверху (1-й шаг).

Мне нужны результаты, чтобы быть похожим на это:

{ 
    "Type" : "Request" 
    "Cat" : "A" 
    "ID" : 10 
} 

{ 
    "Type" : "Processed" 
    "Cat" : "A" 
    "ID" : 10 
} 

{ 
    "Type" : "Receieved" 
    "Cat" : "A" 
    "ID" : 10 
} 

{ 
    "Type" : "Processed" 
    "Cat" : "C" 
    "ID" : 12 
} 

Может кто-нибудь помочь мне о том, как достичь этого? Я использовал elemmatch под $ match в совокупности, но не работал, как ожидалось.

ответ

0

Вы можете попробовать что-то вроде

db.collection.aggregate([ 
    {$project : { 
      "ID":1, 
      "doc.Type" : "$Type", 
      "doc.Cat" : "$Cat", 
      "doc.ID" : "$ID" 
     } 
    } 
    {$group : { 
      _id : "$ID", 
      docs : {$push : doc} 
     } 
    }, 
    {$match : { 
      "docs.Type":"Processed" 
     }  
    }, 
    {$unwind : "$docs"}, 
    {$project : { 
      _id : 0, 
      docs : 0, 
      "Type" : "$docs.Type", 
      "Cat" : "$docs.Cat", 
      "ID" : "$docs.ID" 
     } 
    } 
])