2016-07-04 8 views
0

Если следующее документMongoDB: Как получить значение вложенного объекта?

{ 'a': { 
     'b': ['a', 'x', 'b'], 
     't': ['a', 'z', 'w', 't'] 
     } 
} 

Я хочу, чтобы иметь возможность получить значение, связанное с вложенным объектом. Например, в python я бы сделал print(dict_name['a']['t']).

Я попытался find() и findOne() на обоих команд ниже

db.my_collection.find({}, { 'a.t': 1 }) 
db.my_collection.find({ 'a.t': {$exists: 'true} }) 

, но они не возвращаются правильные данные.

Как я могу запросить документ с 'a' в качестве ключа, затем этот документ, получить значение, связанное с 't', ожидая, что ['a', 'z', 'w', 't'] будет возвращен?

+0

Как насчет 'db.collection.aggregate ([{$ проекта: { "ц" : «$ at», _id: 0}}]) ' –

+0

' 't" - это ключ для «a», поэтому вы создаете запись без id, плохая идея всегда требует вызова всей записи. Ex: {"a": "b", "val": ["a", "x", "b"]} – dsgdfg

+0

@AliDehghani Я получаю кучу пустых объектов – AlanH

ответ

0

Вы можете сделать следующее: агрегацию

db.collection.aggregate([ 
    { 
     $project: { 
      '_id': '$_id', 
      't': '$a.t' 
     } 
    } 
]) 

Это должно дать вам то, что вы ищете.

Heres ссылку на project, в основном, присваивающей ваш «на» массива новое значение имени «т» (это то, что «т»: «$ в» очень много значит)

+0

Хотя это правильно, но его перебор. Для каждого документа вы разворачиваете его в n документах, а затем группируете их снова, чтобы сформировать документ, который вы изначально имели, всего несколькими присутствующими ключами. Почему бы просто не использовать проект? –

+0

спасибо за головы, отредактировал выше, по какой-то причине он не работал на моем конце, делая только проект, но у меня, возможно, была опечатка – devonJS

0

Как насчет этого? :

db.my_collection.aggregate([{"$project":{"_id":"$_id", "t":"$a.t"}}]); 

На этой тестовой коллекции

{ 
     "_id" : ObjectId("577ba92187630c1a06c4bcac"), 
     "a" : { 
       "b" : [ 
         1, 
         2 
       ], 
       "t" : [ 
         2, 
         3 
       ] 
     } 
} 

Он дал мне следующий result-

{ "_id" : ObjectId("577ba92187630c1a06c4bcac"), "t" : [ 2, 3 ] } 
Смежные вопросы