2016-01-26 2 views
0

Я хочу получить значение поля 30 в объекте (в массиве test) с идентификатором ePce6fBAHx9KeKjuM.mongoDB: получить значение поля объекта массива

{ 
    "_id" : "nAwt3b76c24mZfqxz", 
    "title" : "test", 
    "test" : [ 
     { 
      "4" : false, 
      "15" : false, 
      "30" : false, 
      "75" : true, 
      "id" : "ePce6fBAHx9KeKjuM" 
     } 
    ] 
} 

Так что этот результат будет false

Я пытался что-то вроде

var result = Collection.findOne({_id: 'nAwt3b76c24mZfqxz'}).test; 

Но это дало бы мне полный массив. Но мне нужен выделенный объект и только выбранное поле этого объекта (то есть 30).

ответ

2

test - всего лишь массив JS. Используйте обычный синтаксис массива, чтобы получить доступ к его элементам:

var result = Collection.findOne({_id: 'nAwt3b76c24mZfqxz'}).test["30"]; 

EDIT:

Чтобы получить весь объект только один элемент проекции использования массива, в качестве ответа zangw в. После вашего комментария к самому тест-элемент:

db.getCollection('a').find(
    // put your nested document's condition instead of `$exists` 
    {_id: 'nAwt3b76c24mZfqxz', test:{ $elemMatch: { "30": {$exists: true}}}}, 
    // add other fields you like to retrieve, e.g. "title":1 
    {"test.30":1} 
) 
+0

Но это не считает, что тест это массив, и мне нужен результат объекта с данным идентификатором. – user3142695

+0

Было бы неплохо иметь пример ожидаемого результата, так как не совсем понятно, что вы пытаетесь извлечь. –

0

Попробуйте один

Collection.find({{_id: 'nAwt3b76c24mZfqxz'}}, {'test.30': 1, 'test.id': 1}); 

Чтобы выбрать весь test массив следующим образом без _id

Collection.find({{_id: 'nAwt3b76c24mZfqxz'}}, {'test': 1, '_id': 0}); 
+0

Но мне нужен точный объект массива 'test' (id = ePce6fBAHx9KeKjuM). – user3142695

+0

@ user3142695, добавьте {'test': 1}, чтобы выбрать это поле. Соответствует ли это требованиям? или я что-то упускаю? – zangw

+0

Я не совсем уверен, но это просто выбирает поле вообще. Я должен проверить определенный объект в этом массиве. Поэтому, если нет объекта с данным идентификатором, результат должен быть пустым/ложным. – user3142695