2013-10-01 5 views
0

Я новичок в MongoDB так, пожалуйста, поправьте меня, если я использую неправильные термины:MongoDB. Запрос для массива в поддокументе

У меня есть следующий документ (выдержка)

{ 
    "_id" : ObjectId("524b0a1a7294ec8a39d4230f"), 
    "name" : "Irbesartan", 
    "decompositions" : [ 
      "IRB_444", 
      "IRB_442", 
      "IRB_446", 
      "Valsartan acid" 
    ], 
    "precursor" : [ 
      { 
        "mass" : 429, 
        "ion" : "+H", 
        "charge" : "+", 
        "fragments" : [ 
          207, 
          195, 
          180 
        ] 
      }, 
      { 
        "mass" : 427.2252, 
        "ion" : "-H", 
        "charge" : "-", 
        "fragments" : [ 
          193, 
          399 
        ] 
      } 
    ] 
} 

С

db.substances.findOne({name: "Irbesartan"}).precursor 

Я получаю следующее

[ 
    { 
      "mass" : 429, 
      "ion" : "+H", 
      "charge" : "+", 
      "fragments" : [ 
        207, 
        195, 
        180 
      ] 
    }, 
    { 
      "mass" : 427.2252, 
      "ion" : "-H", 
      "charge" : "-", 
      "fragments" : [ 
        193, 
        399 
      ] 
    } 
] 

Но я хочу acces поля внутри, espacially массив фрагментов (используя Mongo Shell)

Возможно ли это в одном запросе?

Или лучше хранить предшественник в качестве массива вместо поддокумента?

ответ

1

Для примера запроса

db.substances.distinct("precursor.fragments", {name: "Irbesartan"}) 

дает:

[ 180, 193, 195, 207, 399 ] 

или

db.substances.findOne({name: "Irbesartan"}).precursor.map(function(r) { 
    return r.fragments; 
}) 

дает

[ [ 207, 195, 180 ], [ 193, 399 ] ] 
+0

Спасибо, я точн Я даю ему попробовать завтра. Возможно ли это db.substances.distinct ("precursor.mass", {name: "Irbesartan"})? – hueck

+0

Да, конечно. Рад, что смог помочь. – viktortnk

Смежные вопросы